面試必考之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安裝與使用全指南