詳細的HTTP協議講解

概念

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先於圖形)等。
HTTP是客戶端瀏覽器或其他程序與Web服務器之間的應用層通信協議。 在Internet上的Web服務器上存放的都是超文本信息,客戶機需要通過HTTP協議傳輸所要訪問的超文本信息。HTTP包含命令和傳輸信息,不僅可用於Web訪問,也可以用於其他因特網/內聯網應用系統之間的通信,從而實現各類應用資源超媒體訪問的集成。
我們在瀏覽器的地址欄裏輸入的網站地址叫做URL (Uniform Resource Locator,統一資源定位符)。就像每家每戶都有一個門牌地址一樣,每個網頁也都有一個Internet地址。當你在瀏覽器的地址框中輸入一個URL或是單擊一個超級鏈接時,URL就確定了要瀏覽的地址。瀏覽器通過超文本傳輸協議(HTTP),將Web服務器上站點的網頁代碼提取出來,並翻譯成漂亮的網頁。

HTTP 協議基礎

● 永遠都是客戶端發起請求,服務器回送響應 應用 HTTP 協議時,必定是一端擔任客戶端角色,另一端擔任服務器端角色。僅從一條通信線路來說,服務器端和客服端的角色是確定的。HTTP 協議規定,請求從客戶端發出,最後服務器端響應該請求並返回。換句話說,肯定是先從客戶端開始建立通信的,服務器端在沒有接收到請求之前不會發送響應。
● 無狀態的協議 HTTP 是一種無狀態協議。協議自身不對請求和響應之間的通信狀態進行保存。 也就是說在 HTTP 這個級別,協議對於發送過的請求或響應都不做持久化處理。這是爲了更快地處理大量事務,確保協議的可伸縮性,而特意把 HTTP 協議設計成如此簡單的。可是隨着 Web 的不斷髮展,我們的很多業務都需要對通信狀態進行保存。於是我們引入了 Cookie 技術。有了 Cookie 再用 HTTP 協議通信,就可以管理狀態了。
● Cookie 管理狀態 Cookie 技術通過在請求和響應報文中寫入 Cookie 信息來控制客戶端的狀態。 Cookie 會根據從服務器端發送的響應報文內的一個叫做 Set-Cookie 的首部字段信息,通知客戶端保存Cookie。當下次客戶端再往該服務器發送請求時,客戶端會自動在請求報文中加入 Cookie 值後發送出去。服務器端發現客戶端發送過來的 Cookie 後,會去檢查究竟是從哪一個客戶端發來的連接請求,然後對比服務器上的記錄,最後得到之前的狀態信息。
● URI 定位資源 HTTP 協議使用 URI 定位互聯網上的資源。正是因爲 URI 的特定功能,在互聯網上任意位置的資源都能訪問到。
● 持久連接 HTTP 協議的初始版本中,每進行一個 HTTP 通信都要斷開一次 TCP 連接。比如使用瀏覽器瀏覽一個包含多張圖片的 HTML 頁面時,在發送請求訪問 HTML 頁面資源的同時,也會請求該 HTML 頁面裏包含的其他資源。因此,每次的請求都會造成無畏的 TCP 連接建立和斷開,增加通信量的開銷。 爲了解決上述 TCP 連接的問題,HTTP/1.1 和部分 HTTP/1.0 想出了持久連接的方法。其特點是,只要任意一端沒有明確提出斷開連接,則保持 TCP 連接狀態。旨在建立一次 TCP 連接後進行多次請求和響應的交互。在 HTTP/1.1 中,所有的連接默認都是持久連接。
● 管線化 持久連接使得多數請求以管線化方式發送成爲可能。以前發送請求後需等待並接收到響應,才能發送下一個請求。管線化技術出現後,不用等待亦可發送下一個請求。這樣就能做到同時並行發送多個請求,而不需要一個接一個地等待響應了。 比如,當請求一個包含多張圖片的 HTML 頁面時,與挨個連接相比,用持久連接可以讓請求更快結束。而管線化技術要比持久連接速度更快。請求數越多,時間差就越明顯。

HTTP工作過程

● 1,地址解析
如用客戶端瀏覽器請求這個頁面:

localhost.com:8080/index.htm

從中分解出協議名、主機名、端口、對象路徑等部分,對於我們的這個地址,解析得到的結果如下:

協議名:http
主機名:localhost.com
端口:8080
對象路徑:/index.htm
複製代碼
複製代碼

在這一步,需要域名系統DNS解析域名,得主機的IP地址。
● 2,封裝HTTP請求數據包
把以上部分結合本機自己的信息,封裝成一個HTTP請求數據包
● 3,封裝成TCP包,建立TCP連接(TCP的三次握手)
在HTTP工作開始之前,客戶機(Web瀏覽器)首先要通過網絡與服務器建立連接,該連接是通過TCP來完成的,該協議與IP協議共同構建Internet,即著名的TCP/IP協議族,因此Internet又被稱作是TCP/IP網絡。HTTP是比TCP更高層次的應用層協議,根據規則,只有低層協議建立之後才能,才能進行更層協議的連接,因此,首先要建立TCP連接,一般TCP連接的端口號是80。這裏是8080端口。
● 4,客戶端向服務器發送請求命令
建立TCP連接後,客戶機發送一個請求給服務器,請求方式的格式爲:統一資源標識符(URL)、協議版本號,後邊是MIME信息包括請求修飾符、客戶機信息和可內容。
● 5,服務器響應
服務器接到請求後,給予相應的響應信息,其格式爲一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,後邊是MIME信息包括服務器信息、實體信息和可能的內容。
實體消息是服務器向瀏覽器發送頭信息後,它會發送一個空白行來表示頭信息的發送到此爲結束,接着,它就以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據.
● 6,服務器關閉TCP連接
一般情況下,一旦服務器向客戶端返回了請求數據,它就要關閉 TCP 連接,然後如果客戶端或者服務器在其頭信息加入了這行代碼 Connection:keep-alive ,TCP 連接在發送後將仍然保持打開狀態,於是,客戶端可以繼續通過相同的連接發送請求。保持連接節省了爲每個請求建立新連接所需的時間,還節約了網絡帶寬。

HTTP的請求方法

GET: 獲取URL指定的資源;
POST:傳輸實體信息
PUT:上傳文件
DELETE:刪除文件
HEAD:獲取報文首部,與GET相比,不返回報文主體部分
OPTIONS:詢問支持的方法
TRACE:追蹤請求的路徑;
CONNECT:要求在與代理服務器通信時建立隧道,使用隧道進行TCP通信。主要使用SSLTLS將數據加密後通過網絡隧道進行傳輸。

HTTP狀態碼

菜鳥教程裏有完整的說明.

HTTP缺點

● 通信使用明文,容易被竊聽
● 不驗證通信方的身份,可能遭遇僞裝
● 無法證明報文的完整性,有可能遭遇篡改

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章