1、HTTP請求和響應格式
1.1.http請求格式
http請求格式由四部分組成:請求行、請求頭、空行、消息體
請求行:是請求消息的第一行,由請求方式(GET/POST/DELETE/PUT)、請求資源路徑、http版本號組成
請求頭:請求頭中的信息有和緩存相關的頭(Cache-Control,If-Modified-Since)、客戶端身份信息(User-Agent)等等
空行:空行表示消息頭的內容到此為止,接下來該解析消息體了,(所以空行必不可少)
消息體:並不是所有的請求都有消息體。
------------------------------------------
http響應格式和請求格式類似,包括:狀態行、響應頭、空行、消息體
狀態行:由http版本號、狀態碼、狀態說明組成
響應頭:響應頭是服務器傳遞給客戶端用於說明服務器的一些信息,以及將來繼續訪問該資源時的策略。
空行:空行表示消息頭的內容到此為止,接下來該解析消息體了,(所以空行必不可少)
消息體:就是服務器返回的數據信息
2、HTTP請求過程
http請求是在三次握手建立tcp連接后開始進行的,基本流程如下:

3、瀏覽器獲取資源和渲染過程
1. 用戶輸入網址(假設是個 HTML 頁面,第一次訪問,無緩存情況),瀏覽器向服務器發出HTTP請求,服務器返回 HTML 文件; (善用緩存,減少HTTP請求,減輕服務器壓力)
2. 瀏覽器載入 HTML 代碼,發現 <head> 內有一個 <link> 引用外部 CSS 文件,則瀏覽器立即發送CSS文件請求,獲取瀏覽器返回的CSS文件; (CSS文件合並,減少HTTP請求)
3. 瀏覽器繼續載入 HTML 中 <body> 部分的代碼,並且 CSS 文件已經拿到手了,可以開始渲染頁面了; (CSS文件需要放置最上面,避免網頁重新渲染)
4. 瀏覽器在代碼中發現一個 <img> 標簽引用了一張圖片,向服務器發出請求。此時瀏覽器不會等到圖片下載完,而是繼續渲染后面的代碼; (圖片文件合並,減少HTTP請求)
5. 服務器返回圖片文件,由於圖片占用了一定面積,影響了后面段落的排布,因此瀏覽器需要回過頭來重新渲染這部分代碼; (最好圖片都設置尺寸,避免重新渲染)
6. 瀏覽器發現了一個包含一行 JavaScript 代碼的 <script> 標簽,會立即運行該js代碼; (script最好放置頁面最下面)
7. js腳本執行了語句,它令瀏覽器隱藏掉代碼中的某個 <div>,突然就少了一個元素,瀏覽器不得不重新渲染這部分代碼; (頁面初始化樣式不要使用js控制)
8. 終於等到了 </html> 的到來,瀏覽器渲染完畢
9. 如果換膚的話,JavaScript 讓瀏覽器換了一下 <link> 標簽的 CSS 路徑;
10. 瀏覽器向服務器請求了新的CSS文件,重新渲染頁面。
有了上面的過程所以才會看到一個頁面除了主要的請求地址,還多出了許多其他請求,類似的如下圖: