幫助文檔
優(yōu)化網(wǎng)站設(shè)計(jì):避免404錯(cuò)誤
什么情況下會(huì)發(fā)生404錯(cuò)誤?
?404 意味著Not Found,意思是說(shuō)未找到資源。既然如此,那么至少會(huì)有兩種原因?qū)е?04錯(cuò)誤:該資源按理說(shuō)是要有,但我們沒(méi)有提供。用戶按照正常的方式來(lái)請(qǐng)求,所以資源找不到。該資源本來(lái)就不存在,用戶按照不正常的方式來(lái)請(qǐng)求,當(dāng)然還是找不到。
先來(lái)看第一種情況吧。
1. 例如每個(gè)網(wǎng)站其實(shí)默認(rèn)都應(yīng)該有一個(gè)favicon.ico文件(規(guī)定是放在網(wǎng)站的根目錄下面),它用來(lái)在瀏覽器中為網(wǎng)站顯示一個(gè)小圖標(biāo)。這個(gè)文件是由瀏覽器自動(dòng)請(qǐng)求的,如果找不到,則自然會(huì)報(bào)告404錯(cuò)誤。
2. 還有一種可能性就是,用戶之前訪問(wèn)過(guò)你的網(wǎng)站,當(dāng)時(shí)某個(gè)頁(yè)面是存在的(比如html/cn/index.html),而且為了訪問(wèn)方便,他將這個(gè)頁(yè)面收藏起來(lái)(恭喜你,有人收藏你的網(wǎng)頁(yè)表明你的網(wǎng)頁(yè)對(duì)他很有用)。但是在某個(gè)時(shí)候,你的網(wǎng)站由于某些考慮,例如功能合并或者重組等,對(duì)html/cn/index.html做了改動(dòng),并且重新命名為了html/cn/index.htm。試想一下,如果原先那個(gè)用戶使用收藏夾里面記錄的地址來(lái)訪問(wèn),那么是不是會(huì)發(fā)生404錯(cuò)誤呢?
3. 又或者,你在網(wǎng)頁(yè)中定義的鏈接地址,由于疏忽,在發(fā)布之前沒(méi)有檢查,導(dǎo)致原來(lái)應(yīng)該鏈接到html/cn/index.htm的鏈接,寫成了html/cn/index.html,用戶在點(diǎn)擊鏈接的時(shí)候,同樣會(huì)收到404錯(cuò)誤。
以上三種場(chǎng)景都屬于本來(lái)應(yīng)該提供資源,但是我們卻沒(méi)有提供,所以由于此類問(wèn)題導(dǎo)致的404錯(cuò)誤,我們是應(yīng)該(同時(shí)也可以)避免的。
但另外一些情形就可能不容易完全避免了,例如用戶就是輸入了錯(cuò)誤的地址(天知道,他們可能是真的誤操作,也可能是故意輸錯(cuò)的),因?yàn)樵撡Y源本來(lái)就不存在,所以當(dāng)然應(yīng)該是返回404錯(cuò)誤。
誤操作:用戶本來(lái)想輸入html/cn/index.htm,但卻輸成了html/cn/index.html故意輸錯(cuò):用戶本來(lái)就不想好好用你的網(wǎng)站,所以他故意亂輸入了一些地址。
?
404錯(cuò)誤會(huì)有什么影響?
看不到的影響:有時(shí)候,404錯(cuò)誤發(fā)生了,用戶可能根本沒(méi)有感覺(jué)到。例如請(qǐng)求favicon.ico文件,或者請(qǐng)求了某個(gè)不存在的腳本文件、樣式表、圖片文件,頁(yè)面還是會(huì)按照正常的方式進(jìn)行呈現(xiàn)。丟失的腳本文件、樣式表、圖片文件,會(huì)導(dǎo)致頁(yè)面的某些行為、界面效果出現(xiàn)異常(也可能不是很明顯)
最大的問(wèn)題可能是性能方面的影響。尤其是如果請(qǐng)求一個(gè)不存在的腳本文件,因?yàn)闉g覽器在請(qǐng)求腳本文件的時(shí)候,即便是返回404,它也會(huì)嘗試去按照J(rèn)avascript的方式解析響應(yīng)中的內(nèi)容。這無(wú)疑會(huì)增加很多處理的時(shí)間,而因?yàn)樵撐募淮嬖冢赃@些都是無(wú)用功。看得到的影響:如果用戶請(qǐng)求的某個(gè)頁(yè)面不存在,那么他將收到明確的回應(yīng)。默認(rèn)情況下,他將收到一個(gè)標(biāo)準(zhǔn)的錯(cuò)誤頁(yè)面(請(qǐng)注意:不少用戶會(huì)被這個(gè)頁(yè)面嚇到)
應(yīng)該如何盡可能避免404錯(cuò)誤的發(fā)生
既然了解了404錯(cuò)誤發(fā)生的場(chǎng)景,那么相應(yīng)的,我們可以通過(guò)一些措施來(lái)盡可能避免它的發(fā)生:
1、為網(wǎng)站提供favicon.ico。
2、在發(fā)布網(wǎng)站前的測(cè)試工作中,運(yùn)行Link checker工具,確保所有鏈接都是能夠訪問(wèn)到的。這個(gè)工具是W3C發(fā)布的,完全免費(fèi),你值得擁有。
3、為了避免用戶收藏絕對(duì)地址(html/cn/index.html),給后期更新帶來(lái)隱患。可以考慮在設(shè)計(jì)階段采用 Url Rewriting ?或者 Routing 等技術(shù)來(lái)實(shí)現(xiàn)更加友好和靈活的地址,以后如果業(yè)務(wù)邏輯有變化,只需要修改一下路由規(guī)則即可。
第三條措施,同樣可以盡可能地減少用戶手工輸入地址出錯(cuò)的機(jī)會(huì)。
?
如何提供自定義的404錯(cuò)誤頁(yè)面
我們知道,404錯(cuò)誤是無(wú)法完全避免的。而默認(rèn)情況下,IIS 服務(wù)會(huì)提供標(biāo)準(zhǔn)的錯(cuò)誤頁(yè)面(但是,這些頁(yè)面可能不是那么友好)。所以,為了讓你的網(wǎng)站能在出現(xiàn)這種錯(cuò)誤的時(shí)候,給用戶相對(duì)較好一些的用戶體驗(yàn),我建議你應(yīng)該設(shè)計(jì)自定義的404錯(cuò)誤頁(yè)面。