定義
超文本傳輸協議(HTTP)是一個用於傳輸超媒體文檔(例如 HTML)的應用層協議。
特點
遵循經典的客戶端-服務端模型
無狀態協議,服務器不會在兩個請求之間保留任何數據(狀態)
基於TCP/IP層
客戶端和服務端通過交換各自的消息來交互。由像瀏覽器這樣的客戶端發出的消息叫做 requests,被服務端響應的消息叫做 responses。
用途
傳輸超文本文檔
傳輸圖片、視頻
向服務器發送HTML表單
根據網頁請求,獲取部分web文檔內容更新網頁
HTTP的組件系統
客戶端
user-agent 客戶端通常由瀏覽器來扮演
作爲一個發起請求的實體
客戶端展現網頁的過程
客戶端首先發起一個請求來獲取頁面的HTML文檔,然後解析其中的資源信息發送其它請求,獲取到CSS和執行腳本來渲染頁面佈局,以及一些其它頁面資源(圖片、視頻等)。瀏覽器把這些資源整合在一起,就構成了一個完整的文檔,即網頁。
服務端
來服務並提供給客戶端web文檔。虛擬上理解爲一個機器,實際上可以是很多計算機組成的計算機集羣,或者是大型的數據中心(數萬到數十萬臺機器)。
代理
在瀏覽器和服務器之間有許多計算機和其它設備轉發了HTTP消息。表現在應用層的被稱爲代理。
代理的作用
緩存(可以是公開的也可以是私有的,像瀏覽器的緩存)
過濾
負載均衡
認證
日誌記錄
HTTP的基本性質
HTTP是簡單的
大體上設計的簡單易讀,報文能夠人爲讀懂。
HTTP是可拓展的
在 HTTP/1.0 中出現的 HTTP headers 讓協議擴展變得非常容易。只要服務端和客戶端就新 headers 達成語義一致,新功能就可以被輕鬆加入進來。
HTTP是無狀態,有會話的
HTTP是無狀態的:在同一個連接中,兩個執行成功的請求之間是沒有關係的,使用Cookies可以創建有狀態的會話。
HTTP和連接
HTTP是基於傳輸層的TCP協議,TCP是面向連接的。在每次通信過程中,客戶端會和服務端建立TCP連接。
HTTP流
當客戶端想和服務端進行交互時,過程如下:
1.打開一個TCP連接,被用來發送一條或者多條請求,用來接收響應消息。
2.發送一個HTTP報文
3.讀取服務端響應的報文信息
4.關閉連接或者爲後續請求重用連接
HTTP報文
HTTP請求
一個HTTP的method,經常由一個動詞或者名詞來定義客戶端的行爲。常用的有GET,POST,HEADER,OPTION。
path:獲取資源的路徑
HTTP協議版本號
爲服務端表達其它信息的頭部headers
對於像post這樣的方法,報文的body就包含了發送的信息。
HTTP響應
HTTP協議版本號
一個狀態碼,告訴客戶端請求成功或者失敗,以及失敗的原因。
個狀態信息,這個信息是非權威的狀態碼描述信息,可以由服務端自行設定。
HTTP headers,與請求頭部類似。
可選項,比起請求報文,響應報文中更常見地包含獲取的資源body。
基於HTTP的APIs
基於HTTP的最常用API是 XMLHttpRequest API,可用於在客戶端和服務器之間交換數據。