標籤:

面試必考之http狀態碼有哪些

背景

http狀態碼有哪些,這也是一個很高頻的面試問題。

一般大家都知道404頁面不存在,500伺服器錯誤,301重定向,302臨時重定向,200ok,401未授權啥的。

如果只是簡單的這樣答,可能只能讓面試官給你的答案打個五六十分,不足以給面試官留下良好的印象,為了展現自己良好的http知識,你或許可以重點介紹三個狀態碼及相關的知識,他們分別是304協商緩存,101協議升級,以及307hsts跳轉。

304協商緩存

先從304協商緩存開始吧。這是比較基礎的知識。相信我,只要你提起304協商緩存,面試官一定會忍不住問你,什麼是協商緩存?

這時就到了你展示一下自己豐富的瀏覽器緩存知識的時候了。我一般會這麼答:瀏覽器緩存分為強制緩存和協商緩存,優先讀取強制緩存。

強制緩存分為expires和cache-control,而expires是一個特定的時間,是比較舊的標準和cache-control通常是一個具體的時間長度,比較新,優先順序也比較高。

而協商緩存包括etag和last-modified,last-modified的設置標準是資源的上次修改時間,而etag是為了應對資源修改時間可能很頻繁的情況出現的,是基於資源的內容計算出來的值,因此優先順序也較高。

協商緩存與強制緩存的區別在於強制緩存不需要訪問伺服器,返回結果是200,協商緩存需要訪問伺服器,命中協商緩存的話,返回結果是304。

101協議升級

主要用於websocket,也可以用於http2的升級。

websocket的特點和功效不細說,大家都很熟了。

http2好處多多,一般說出支持單個連接多次請求,二進位,壓縮頭部,伺服器推送等特徵面試官就比較滿足了。具體了解也是自行谷歌百度,這裡也是不細說。

當然這時候我們可能要應對一下面試官接下來的追問:到底https,http,http2以及它的原形spdy有什麼區別,又分別有什麼優點和不足,他們的建立連接分別又有著什麼環節,這些知識就需要讀者自己去充分搜索查詢了。

307 hsts跳轉

這個比較高端,原本的用法是用於讓post請求的跳轉去新的post請求,但也用於hsts跳轉。

hsts全稱HTTP嚴格傳輸安全(HTTP Strict Transport Security,縮寫:HSTS),功能是要求瀏覽器下次訪問該站點時使用https來訪問,而不再需要先是http再轉https。這樣可以避免ssl剝離攻擊,即攻擊者在用戶使用http訪問的過程中進行攻擊,對伺服器冒充自己是用戶,在攻擊者和伺服器中使用https訪問,在用戶和伺服器中使用http訪問。

具體使用方法是在伺服器響應頭中添加 Strict-Transport-Security,可以設置 max-age

當然,提到了ssl剝離攻擊,你一定很感興趣還有什麼方法可以對號稱安全的https進行攻擊呢?我這裡了解到的有ssl劫持攻擊,大概就是信任第三方的安全證書,這點被利用於代理軟體監聽https。如果還有更多的,歡迎補充。

總結

僅僅三個狀態碼,都可以牽涉到如此豐富的知識,對於狀態碼,我們不能只是片面的去背誦狀態碼及對應的含義,要去主動挖掘,深入,藉助http狀態碼來建立自己的網路體系。

留一個課後作業:301和302有什麼區別?分別適用於什麼場景?你還會只去記一個是永久重定向,一個是臨時重定向嗎?

最後,如果我的文章對你有幫助,歡迎關注和star本博客或是關注我的github

參考

知道你們很懶,幫你們搜索好了相關資料

淺談瀏覽器http的緩存機制

http2講解

HTTP,HTTP2.0,SPDY,HTTPS你應該知道的一些事 你所不知道的 HSTS

關於啟用 HTTPS 的一些經驗分享(一)


推薦閱讀:

為什麼國內視頻網站多採用HTTP協議傳輸視頻,而國外多使用RTMP等專門的流媒體協議?
最經典的前端面試題之一,你能答出什麼幺蛾子?
在前端性能優化中應用HTTP緩存的三部曲
為什麼fiddler無法抓到訊飛語音輸入的請求?
KaliRouter安裝與使用全指南

TAG:HTTP | 前端開發 |