HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是因特網上應用最為廣泛的一種網絡傳輸協議,所有的WWW文件都必須遵守這個標准。
在聊http協議之前我們需要了解一下計算機網絡體系結構,OSI模型把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層:
第一層~物理層:規定通信設備的機械的、電氣的、功能的和過程的特性,用以建立、維護和拆除物理鏈路連接。數據的單位稱為比特(bit)。屬於物理層定義的典型規范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。
第二層~數據鏈路層:在物理層提供比特流服務的基礎上,建立相鄰結點之間的數據鏈路,通過差錯控制提供數據幀(Frame)在信道上無差錯的傳輸,並進行各電路上的動作系列。數據的單位稱為幀(frame)。數據鏈路層協議的代表包括:SDLC、HDLC、PPP、STP、幀中繼等。
第三層~網絡層:將數據鏈路層提供的幀組成數據包,數據的單位稱為數據包(packet)。網絡層協議的代表包括:IP、IPX、RIP、OSPF等。
第四層~傳輸層:負責獲取全部信息,提供端到端(最終用戶到最終用戶)的透明的、可靠的數據傳輸服務。傳輸層協議的代表包括:TCP、UDP、SPX等。
第五層~會話層:提供包括訪問驗證和會話管理在內的建立和維護應用之間通信的機制。如服務器驗證用戶登錄便是由會話層完成的。
第六層~表示層:提供格式化的表示和轉換數據服務。數據的壓縮和解壓縮, 加密和解密等工作都由表示層負責。
第七層~應用層:為操作系統或網絡應用程序提供訪問網絡服務的接口。應用層協議的代表包括:Telnet、FTP、HTTP、SNMP等。
從上面可以清楚的知道http是應用層的協議。HTTP協議工作於客戶端-服務端架構上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求。HTTP默認端口號為80,但是你也可以改為其他端口。HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和建立連接。
HTTP協議通信流程:
CGI(Common Gateway Interface) 是 HTTP 服務器與你的或其它機器上的程序進行“交談”的一種工具,其程序須運行在網絡服務器上。CGI 程序使網頁具有交互功能。
HTTP的特點:
HTTP是無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。
HTTP是媒體獨立的:這意味着,只要客戶端和服務器知道如何處理的數據內容,任何類型的數據都可以通過HTTP發送。客戶端以及服務器指定使用適合的MIME-type(在ASP中,設定MIME類型的方法是通過Response對象的ContentType屬性)內容類型。
HTTP是無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
請求消息由四部分組成,請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成;響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。
例圖如下:
客戶端請求
服務器響應
HTTP 協議中共定義了八種方法來表明對 Request-URI 指定的資源的不同操作方式,具體介紹如下:
HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
OPTIONS:返回服務器針對特定資源所支持的HTTP請求方法。也可以利用向Web服務器發送'*'的請求來測試服務器的功能性。
HEAD:向服務器索要與GET請求相一致的響應,只不過響應體將不會被返回。這一方法可以在不必傳輸整個響應內容的情況下,就可以獲取包含在響應消息頭中的元信息。
GET:向特定的資源發出請求。
POST:向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的創建和/或已有資源的修改。
PUT:向指定資源位置上傳其最新內容。
DELETE:請求服務器刪除 Request-URI 所標識的資源。
TRACE:回顯服務器收到的請求,主要用於測試或診斷。
CONNECT:HTTP/1.1 協議中預留給能夠將連接改為管道方式的代理服務器。
HTTP狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,后兩個數字沒有分類的作用。HTTP狀態碼共分為5種類型:
1** :信息,服務器收到請求,需要請求者繼續執行操作
2** : 成功,操作被成功接收並處理
3** :重定向,需要進一步的操作以完成請求
4** :客戶端錯誤,請求包含語法錯誤或無法完成請求
5** : 服務器錯誤,服務器在處理請求的過程中發生了錯誤
比如常見的狀態碼有,200 - 請求成功、301 - 資源(網頁等)被永久轉移到其它URL、404 - 請求的資源(網頁等)不存在、500 - 內部服務器錯誤。
HTTP content-type
Content-Type,內容類型,一般是指網頁中存在的Content-Type,用於定義網絡文件的類型和網頁的編碼,決定瀏覽器將以什么形式、什么編碼讀取這個文件,也就是上面提到的媒體獨立特點。
好了,這只是一個簡單的隨筆,希望能幫助你額!