前端工程師到底需要掌握哪些 HTTP 知識才能過好這一生?

端端君發表於2019-03-03

最近在網上看了幾篇文章,都是跟HTTP有關,作為一個支撐起整個網際網路 web 應用運轉的協議,程式開發人員如果對此不瞭解,日子肯定不好過的。但是話說回來,如果給自己的職業進行一定範圍的限制,就限定在前端工程師,到底需要掌握多少 HTTP 的知識才能過好這一生呢?端端君大致的整理了一下,包含大致以下方面:http特點,報文,快取,狀態碼,方法,cookie, 跨域方式,持久連線和管線化,瀏覽器輸入URL到頁面顯示整個過程到底發生了什麼等等。我能想到的還是有限,僅是拋磚引玉,記錄自己思考的同時也希望對其他人有所幫助,所以,也歡迎評論交流補充。

前端工程師到底需要掌握哪些 HTTP 知識才能過好這一生?

http特點

提起 http,肯定會想到無狀態,無連線。無狀態的話網站是如何記錄使用者的狀態呢?cookie是幹嘛的?為什麼購物網站搜了一次滑鼠,以後很多網站都會有小窗推薦滑鼠?三次握手是個什麼東西?多次請求是不是可以少握幾次?
當然,http 是比較靈活的。它是怎麼實現不同資料型別的傳輸的?

報文

報文分為請求報文和響應報文。請求報文又分為請求行,請求頭,請求體。響應報文分為響應行,響應頭,響應體。
那麼問題來了,報文之間是怎麼換行的?和Linux的換行一樣嗎?url出現在哪裡?服務端通過什麼來解析請求訊息的?POST請求既然沒有規定訊息體的編碼方式,那麼都可以使用哪些方式來編碼?

快取

瀏覽器的快取主要有強快取和協商快取。強快取的話只用 expires 為什麼不好?協商快取只用 last-modified 也不夠準確呢?

狀態碼

常見的的狀態碼有12345大類。301 和 302 有啥區別?什麼情況下會有 304?

方法

HTTP方法有GET,POST,PUT,DELETE,HEAD。
那麼問題來了,GET 和 POST 有啥區別?

cookie

cookie 本身是用於服務端和客戶端通訊的,因為具備儲存功能,所以也被借用了。
那麼問題來了, cookie 怎樣設定和獲取? cookie 有什麼缺點? localStorage 和 SessionStorage 有什麼優點?

跨域方式

簡單歸納一下跨域可以有以下幾個方式:hash,postMessage,JSONP,CORS,Websocket等等。
那麼問題來了,這幾種跨域原理是什麼?有什麼限制?特定應用場景?

持久連線和管線化

持久連線需要在請求頭加入 connection: keep-alive.
那麼問題來了,長連線對 http 版本有什麼要求? 管線化是什麼?請求響應的過程是怎樣的?管線化需要注意什麼?

瀏覽器輸入URL到頁面顯示整個過程到底發生了什麼

終極問題來了,使用者從瀏覽器輸入“www.baidu.com”,直到渲染出頁面都發什麼了什麼?
可以把這個問題簡單分解一下,客戶端是怎樣發起請求的?服務端怎樣響應請求?客戶端如何解析HTML並渲染頁面的?
還有,重排和重繪又是什麼?發生在哪些時機?如何避免呢?

總結:

HTTP的內容稍微一列就會很多。以上僅僅是基礎知識,只能說作為一個前端工程師掌握以上內容會比較好過一些。隨著我們的知識和實踐經驗的積累,技術的邊界也會越擴越大,也會發現更多 HTTP 的奧祕,總之,多的是,你不知道的事。

參考連結:

developer.mozilla.org/zh-CN/docs/…
imququ.com/post/four-w…

相關文章