HTTP請求過程


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文件,重新渲染頁面。

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

  

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM