大家好群井,我是IT修真院深圳分院第06期學(xué)員,一枚正直善良的web程序員毫胜。
今天給大家分享一下书斜,修真院官網(wǎng) JS-05任務(wù)中可能會使用到的知識點(diǎn):
1.背景介紹
當(dāng)瀏覽者訪問一個網(wǎng)頁時,瀏覽者的瀏覽器會向網(wǎng)頁所在服務(wù)器發(fā)出請求酵使。
當(dāng)瀏覽器接收并顯示網(wǎng)頁前荐吉,此網(wǎng)頁所在的服務(wù)器會返回一個包含HTTP狀態(tài)碼的信息頭(server header)用以響應(yīng)瀏覽器的請求。
HTTP狀態(tài)碼由三個十進(jìn)制數(shù)字組成口渔,三位數(shù)字代碼分別代表著不同的請求狀態(tài)样屠,第一個十進(jìn)制數(shù)字定義了狀態(tài)碼的類型,后兩個數(shù)字沒有分類的作用缺脉。
2.知識剖析
HTTP狀態(tài)碼分類
HTTP狀態(tài)碼共分為5種類型:
1開頭:(被接受痪欲,需要繼續(xù)處理。)這一類型的狀態(tài)碼攻礼,代表請求已被接受业踢,需要繼續(xù)處理。這類響應(yīng)是臨時響應(yīng)礁扮,只包含狀態(tài)行和某些可選的響應(yīng)頭信息知举,并以空行結(jié)束。
2開頭 (請求成功)這一類型的狀態(tài)碼太伊,代表請求已成功被服務(wù)器接收雇锡、理解、并接受僚焦。
3開頭 (請求被重定向)這類狀態(tài)碼代表需要客戶端采取進(jìn)一步的操作才能完成請求锰提。通常,這些狀態(tài)碼用來重定向,后續(xù)的請求地址(重定向目標(biāo))在本次響應(yīng)的 location 域中指明欲账。
4開頭:(請求錯誤)這類的狀態(tài)碼代表了客戶端看起來可能發(fā)生了錯誤屡江,妨礙了服務(wù)器的處理。除非響應(yīng)的是一個 HEAD 請求赛不,否則服務(wù)器就應(yīng)該返回一個解釋當(dāng)前錯誤狀況的實體惩嘉,以及這是臨時的還是永久性的狀況。這些狀態(tài)碼適用于任何請求方法踢故。瀏覽器應(yīng)當(dāng)向用戶顯示任何包含在此類錯誤響應(yīng)中的實體內(nèi)容文黎。
5開頭:(服務(wù)器錯誤)這類狀態(tài)碼代表了服務(wù)器在處理請求的過程中有錯誤或者異常狀態(tài)發(fā)生,也有可能是服務(wù)器意識到以當(dāng)前的軟硬件資源無法完成對請求的處理殿较。除非這是一個HEAD 請求耸峭,否則服務(wù)器應(yīng)當(dāng)包含一個解釋當(dāng)前錯誤狀態(tài)以及這個狀況是臨時的還是永久的解釋信息實體。瀏覽器應(yīng)當(dāng)向用戶展示任何在當(dāng)前響應(yīng)中被包含的實體淋纲。
如何記憶這些狀態(tài)碼
Http 狀態(tài)碼是做Web開發(fā)的必備的基礎(chǔ)知識劳闹,面試中也會經(jīng)常出現(xiàn)這方面的考題。但是要記住全部的狀態(tài)碼不是一件容易的事洽瞬,部分狀態(tài)碼記憶:
200 歡迎回來本涕,主人 (正常;請求已完成伙窃。)
301 人家搬家了 (已移動 — 請求的數(shù)據(jù)具有新的位置且更改是永久的菩颖。)
307 不是這里,換個地方啦 (重新請求的URL为障,客戶端自動重新請求新的地址)
400 不要把奇怪的東西給人家嘛 (錯誤請求 — 請求中有語法問題晦闰,或不能滿足請求。)
403 這里不可以啦w⒃埂(禁止 — 即使有授權(quán)也不需要訪問呻右。)
404 這里什么都沒有 --- 人家是平的啦。 (找不到 — 服務(wù)器找不到給定的資源鞋喇;文檔不存在窿冯。)
405 打開方式不對 (資源被禁止)
414 這... 太長了啦 (請求 - URI 太長)
500 服務(wù)姬壞掉了啦 (內(nèi)部錯誤 — 因為意外情況,服務(wù)器不能完成請求确徙。)
503 不要...人家還沒準(zhǔn)備好啦 (無法獲得服務(wù) — 由于臨時過載或維護(hù)醒串,服務(wù)器無法處理請求。)
101 服務(wù)姬傲嬌中 (服務(wù)器將遵從客戶的請求轉(zhuǎn)換到另外一種協(xié)議)
100 人家... 還要... (初始的請求已經(jīng)接受鄙皇,客戶應(yīng)當(dāng)繼續(xù)發(fā)送請求的其余部分芜赌。
其余http狀態(tài)碼介紹
3.常見問題
有哪些常見的狀態(tài)碼?
4.解決方案
一般只需要了解以下常見的狀態(tài)碼就夠了:
200 OK:服務(wù)器成功處理了請求(這個是我們見到最多的)
301 Moved Permanently:資源移動伴逸。所請求資源自動到新的URL缠沈,瀏覽器自動跳轉(zhuǎn)到新的URL
304 Not Modified:服務(wù)端的資源與客戶端上一次請求的一致,不需要重新傳輸,客戶端使用本地緩存的即可
400 Bad Request:用于告訴客戶端它發(fā)送了一個錯誤的請求
404 Not Found:(頁面丟失)未找到資源
500 Internal Server Error:服務(wù)器內(nèi)部出現(xiàn)了錯誤
501 Internal Server Error:服務(wù)器遇到一個錯誤洲愤,使其無法對請求提供服務(wù)
5.編碼實戰(zhàn)
6.擴(kuò)展思考
301和302都是重定向颓芭,他們之間有什么區(qū)別呢?
301為永久移動柬赐。請求的資源已被永久的移動到新URL亡问,返回信息會包括新的URL,瀏覽器會自動定向到新URL肛宋。今后任何新的請求都應(yīng)使用新的URL代替州藕。
302為臨時移動。與301類似酝陈。但資源只是臨時被移動床玻。客戶端應(yīng)該繼續(xù)使用原有URL沉帮。
7.參考文獻(xiàn)
參考文獻(xiàn):
菜鳥教程
讓HTTP萌娘幫你記住狀態(tài)碼吧
8.更多討論
問題1:304 是什么锈死?
答:304表示未修改。所請求的資源未修改穆壕,服務(wù)器返回此狀態(tài)碼時待牵,不會返回任何資源×惶矗客戶端通常會緩存訪問過的資源,通過提供一個頭信息指出客戶端希望只返回在指定日期之后修改的資源漫玄。
問題2:403 是什么茄蚯?
答:服務(wù)器理解請求客戶端的請求,但是拒絕執(zhí)行此請求睦优。
問題3:為什么要避免304請求渗常?
答:因為我們在對文件設(shè)置緩存后,瀏覽器會將這些文件緩存在本地汗盘,當(dāng)再次需要這些文件的時候皱碘,瀏覽器仍然會發(fā)送請求,然后服務(wù)器會返回304隐孽,告訴瀏覽器直接用本地的緩存就行了癌椿。這樣和直接使用本地緩存相比,多了一次http請求菱阵。解決方案其實也簡單踢俄,給緩存文件設(shè)置一個比較的max-age,需要更新的時候添加版本號就可以了晴及。