首頁 > 軟體

HTTP請求過程詳解

2020-06-16 17:04:20

1、HTTP請求和響應格

1.1.http請求格式

  http請求格式由四部分組成:請求行、請求頭、空行、訊息體

  

  請求行:是請求訊息的第一行,由請求方式(GET/POST/DELETE/PUT)、請求資源路徑、http版本號組成

  請求頭:請求頭中的資訊有和快取相關的頭(Cache-Control,If-Modified-Since)、用戶端身份資訊(User-Agent)等等

  空行:空行表示訊息頭的內容到此為止,接下來該解析訊息體了,(所以空行必不可少)

  訊息體:並不是所有的請求都有訊息體。

  ------------------------------------------

  http響應格式和請求格式類似,包括:狀態行、響應頭、空行、訊息體

  

  狀態行:由http版本號、狀態碼、狀態說明組成

  響應頭:響應頭是伺服器傳遞給用戶端用於說明伺服器的一些資訊,以及將來繼續存取該資源時的策略。

  空行:空行表示訊息頭的內容到此為止,接下來該解析訊息體了,(所以空行必不可少)

  訊息體:就是伺服器返回的資料資訊

2、HTTP請求過程

  http請求是在三次握手建立tcp連線後開始進行的,基本流程如下:

(1)    建立TCP連線
  在HTTP工作開始之前,Web瀏覽器首先要通過網路與Web伺服器建立連線,該連線是通過TCP來完成的,該協定與IP協定共同構建Internet,即著名的TCP/IP協定族,因此Internet又被稱作是TCP/IP網路。HTTP是比TCP更高層次的應用層協定,根據規則,只有低層協定建立之後才能,才能進行更層協定的連線,因此,首先要建立TCP連線,一般TCP連線的埠號是80
(2)    Web瀏覽器向Web伺服器傳送請求命令
  一旦建立了TCP連線,Web瀏覽器就會向Web伺服器傳送請求命令例如:
(3)    Web瀏覽器傳送請求頭資訊
  瀏覽器傳送其請求命令之後,還要以頭資訊的形式向Web伺服器傳送一些別的資訊,之後瀏覽器傳送了一空白行來通知伺服器,它已經結束了該頭資訊的傳送。
(4)    Web伺服器應答
  客戶機向伺服器發出請求後,伺服器會客戶機回送應答,HTTP/1.1 200 OK應答的第一部分是協定的版本號和應答狀態碼
(5)    Web伺服器傳送應答頭資訊
  正如用戶端會隨同請求傳送關於自身的資訊一樣,伺服器也會隨同應答向使用者傳送關於它自己的資料及被請求的文件。
(6)    Web伺服器向瀏覽器傳送資料
  Web伺服器向瀏覽器傳送頭資訊後,它會傳送一個空白行來表示頭資訊的傳送到此為結束,接著,它就以Content-Type應答頭資訊所描述的格式傳送使用者所請求的實際資料
(7)    Web伺服器關閉TCP連線
  一般情況下,一旦Web伺服器向瀏覽器傳送了請求資料,它就要關閉TCP連線,然後如果瀏覽器或者伺服器在其頭資訊加入了這行程式碼Connection:keep-alive,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檔案,重新渲染頁面。

  有了上面的過程所以才會看到一個頁面除了主要的請求地址,還多出了許多其他請求,類似的如下圖:

  

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-10/147814.htm


IT145.com E-mail:sddin#qq.com