通過HTTP請求響應過程了解HTTP協議


通過HTTP請求響應過程了解HTTP協議

首先了解一次完整的HTTP請求到響應的過程需要的步驟

1. 域名解析 
2. 發起TCP的3次握手 
3. 建立TCP連接后發起http請求 
4. 服務器端響應http請求,瀏覽器得到html代碼 
5. 瀏覽器解析html代碼,並請求html代碼中的資源 
6. 瀏覽器對頁面進行渲染呈現給用戶

1.域名解析

就是將網站名稱轉變成IP地址:localhost-->127.0.0.1
像什么hosts文件,DNS域名解析等等可以實現這種功能

2.發起TCP的3次握手

在客戶機和服務器之間建立正常的TCP網絡連接時:

客戶機首先發出一個SYN消息,

服務器使用SYN+ACK應答表示接收到了這個消息,

最后客戶機再以ACK消息響應。

這樣在客戶機和服務器之間才能建立起可靠的TCP連接,數據才可以在客戶機和服務器之間傳遞。

下面一段內容引自一次完整的HTTP事務是怎樣一個過程?

拿到域名對應的IP地址之后,User-Agent(一般是指瀏覽器)會以一個隨機端口(1024 < 端口 < 65535)向服務器的WEB程序(常用的有httpd,nginx等)80端口發起TCP的連接請求。這個連接請求(原始的http請求經過TCP/IP4層模型的層層封包)到達服務器端后(這中間通過各種路由設備,局域網內除外),進入到網卡,然后是進入到內核的TCP/IP協議棧(用於識別該連接請求,解封包,一層一層的剝開),還有可能要經過Netfilter防火牆(屬於內核的模塊)的過濾,最終到達WEB程序(本文就以Nginx為例),最終建立了TCP/IP的連接。

3.發起HTTP請求(HTTP Request)

所謂的HTTP請求,也就是Web客戶端向Web服務器發送信息,這個信息由如下三部分組成:

(1)請求行

例如:GET www.cnblogs.com HTTP/1.1
請求行寫法是固定的,由三部分組成,

第一部分是請求方法:

除了常見的只有Get和Post方法,實際上HTTP請求方法還有很多,比如: PUT方法,DELETE方法,HEAD方法,CONNECT方法,TRACE方法

第二部分是請求網址,

第三部分是HTTP版本。

(2)HTTP頭

HTTP頭在HTTP請求可以是3種HTTP頭:1. 請求頭(request header)  2. 普通頭(general header)  3. 實體頭(entity header)

通常來說,由於Get請求往往不包含內容實體,因此也不會有實體頭。

(3)內容

只在POST請求中存在,因為GET請求並不包含任何實體

4.服務器端HTTP響應(HTTP Response)請求

當Web服務器收到HTTP請求后,會根據請求的信息做某些處理(這些處理可能僅僅是靜態的返回頁,或是包含Asp.net, PHP, Jsp等語言進行處理后返回),相應的返回一個HTTP響應。HTTP響應在結構上很類似於HTTP請求,也是由三部分組成,分別為:

1.狀態行

例如:HTTP/1.1 200 OK

第一部分是HTTP版本

第二部分是響應狀態碼
第三部分是狀態碼的描述

    信息類 (100-199)
    響應成功 (200-299)
    重定向類 (300-399)
    客戶端錯誤類 (400-499)
    服務端錯誤類 (500-599)

詳細HTTP 狀態消息請看:HTTP 狀態消息

2.HTTP頭

HTTP響應中包含的頭包括:1. 響應頭(response header) 2. 普通頭(general header) 3. 實體頭(entity header)。

3.返回內容

HTTP響應內容就是HTTP請求所請求的信息。這個信息可以是一個HTML,也可以是一個圖片。響應的數據格式通過Content-Type字段來獲得:Content-Type:image/png;或者我們熟悉的Content-Type:text/html

下面是一些常見的Content-Type字段的值。

    text/plain
    text/html
    text/css
    image/jpeg
    image/png
    image/svg+xml
    audio/mp4
    video/mp4
    application/javascript
    application/pdf
    application/zip
    application/atom+xml

5.瀏覽器解析html代碼,並請求html代碼中的資源

了解持久連接

有時候我們獲取一個HTML頁面,在對瀏覽器對HTML解析的過程中,如果發現額外的URL需要獲取的內容,會再次發起HTTP請求去服務器獲取,比如樣式文件,圖片。許多個HTTP請求,只依靠一個TCP連接就夠了,這就是所謂的持久連接。也是所謂的一次HTTP請求完成。

參考:

1.HTTP協議漫談

2.一次完整的HTTP事務是怎樣一個過程?

3.HTTP 協議入門


免責聲明!

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



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