最近在網上看了幾篇文章,都是跟HTTP有關,做爲一個支撐起整個互聯網 web 應用運轉的協議,程序開發人員若是對此不瞭解,日子確定很差過的。可是話說回來,若是給本身的職業進行必定範圍的限制,就限定在前端工程師,到底須要掌握多少 HTTP 的知識才能過好這一輩子呢?端端君大體的整理了一下,包含大體如下方面:http特色,報文,緩存,狀態碼,方法,cookie, 跨域方式,持久鏈接和管線化,瀏覽器輸入URL到頁面顯示整個過程到底發生了什麼等等。我能想到的仍是有限,僅是拋磚引玉,記錄本身思考的同時也但願對其餘人有所幫助,因此,也歡迎評論交流補充。
提起 http,確定會想到無狀態,無鏈接。無狀態的話網站是如何記錄用戶的狀態呢?cookie是幹嗎的?爲何購物網站搜了一次鼠標,之後不少網站都會有小窗推薦鼠標?三次握手是個什麼東西?屢次請求是否是能夠少握幾回?
固然,http 是比較靈活的。它是怎麼實現不一樣數據類型的傳輸的?html
報文分爲請求報文和響應報文。請求報文又分爲請求行,請求頭,請求體。響應報文分爲響應行,響應頭,響應體。
那麼問題來了,報文之間是怎麼換行的?和Linux的換行同樣嗎?url出如今哪裏?服務端經過什麼來解析請求消息的?POST請求既然沒有規定消息體的編碼方式,那麼均可以使用哪些方式來編碼?前端
瀏覽器的緩存主要有強緩存和協商緩存。強緩存的話只用 expires 爲何很差?協商緩存只用 last-modified 也不夠準確呢?web
常見的的狀態碼有12345大類。301 和 302 有啥區別?什麼狀況下會有 304?跨域
HTTP方法有GET,POST,PUT,DELETE,HEAD。
那麼問題來了,GET 和 POST 有啥區別?瀏覽器
cookie 自己是用於服務端和客戶端通訊的,由於具有存儲功能,因此也被借用了。
那麼問題來了, cookie 怎樣設置和獲取? cookie 有什麼缺點? localStorage 和 SessionStorage 有什麼優勢?緩存
簡單概括一下跨域能夠有如下幾個方式:hash,postMessage,JSONP,CORS,Websocket等等。
那麼問題來了,這幾種跨域原理是什麼?有什麼限制?特定應用場景?cookie
持久鏈接須要在請求頭加入 connection: keep-alive.
那麼問題來了,長鏈接對 http 版本有什麼要求? 管線化是什麼?請求響應的過程是怎樣的?管線化須要注意什麼?前端工程師
終極問題來了,用戶從瀏覽器輸入「www.baidu.com」,直到渲染出頁面都發什麼了什麼?
能夠把這個問題簡單分解一下,客戶端是怎樣發起請求的?服務端怎樣響應請求?客戶端如何解析HTML並渲染頁面的?
還有,重排和重繪又是什麼?發生在哪些時機?如何避免呢?socket
HTTP的內容稍微一列就會不少。以上僅僅是基礎知識,只能說做爲一個前端工程師掌握以上內容會比較好過一些。隨着咱們的知識和實踐經驗的積累,技術的邊界也會越擴越大,也會發現更多 HTTP 的奧祕,總之,多的是,你不知道的事。post