標籤:
1、Http協議的基本原理:有用戶端向伺服器發送請求,服務端對請求處理,對用戶端進行相應。如所示。
圖1 Http協議原理圖
下面給出一個簡單的請求和響應的範例程式碼:
用戶端請求:
GET / HTTP/1.1 Host: localhostAccept: text/htmlAccept-Language: en-usAccept-Encoding: gzip,deflateConnection: keep-alive空行(CR+LF)
服務端響應:
HTTP/1.1 200 OK Date: Fri, 13 Jul 2012 02:45:30 GMTServer: ApacheLast-Modified: Fri ,31 Agu 2007 02:02:20 GMTETag: "45bae1-16a-46d776ac"Connection: closeContent-Type: text/htmlContent-Length:362空行(CR+LF)<html> <head></head><body>.... --Content 362Bytes.... </body></html>
2、Http請求
a.請求報文格式:
----------------------------------------------------------
請求行 ↔ GET / HTTP/1.1
要求標頭資訊 ↔ Host: localhost
...
...
...
空行(CR+LF)
[請求主體資訊](可以沒有)
-----------------------------------------------------------
b.說明:
→請求行:要求方法+請求路徑+Http協議版本
要求方法:GET,POST,HEAD,OPTION,DELETE,PUT等
請求路徑: /
Http協議版本:HTTP/0.9 HTTP/1.0 HTTP/1.1
→要求標頭資訊
Host: 請求的主機名稱 (localhost)
注意:Host欄位資訊必須被包含在要求標頭資訊中,因為同一個IP地址下可能會有多個虛擬機器主機,
需要Host來指定請求的是該IP下的哪一個主機。
Accept: 用戶端可以處理的檔案類型。 (text/html,text/plain,image/jpeg)
Accept-Encoding: 使用者代理程式支援的內容編碼及優先順序順序 (gzip,deflate,compress)
Accept-Charset: 使用者代理程式支援的字元集及優先順序順序 (iso-8859-5)
Referer: 告知伺服器請求的原始資源的URI (用此欄位可以進行反防盜鏈)
例如:Referer:http://www.baidu.com
User-Agent: 傳達建立請求的瀏覽器和使用者代理程式名稱等資訊
3、Http響應
a.響應報文格式
-------------------------------------------------
響應行 ↔ HTTP/1.1 200 OK
回應標頭資訊 ↔ Server:Apache
...
...
...
空行(CR+LF)
[響應主體資訊](可以沒有)
--------------------------------------------------
b.說明:
→響應行:Http協議版本+狀態代碼+狀態字
Http協議:HTTP/0.9,HTTP/1.0,HTTP/1.1
狀態代碼:
狀態代碼 說明
1XX 資訊性狀態代碼。接收的請求正在處理
2XX 成功狀態代碼。請求正常處理完畢
3XX 重新導向狀態代碼。需要進行附加操作以完成請求
4XX 用戶端錯誤狀態代碼。伺服器無法處理請求
5XX 伺服器錯誤狀態代碼。伺服器處理請求出錯
一些重要的狀態代碼:
2XX:200 204 206
200(OK) → 用戶端的請求在服務端被正常處理
204(No Content) → 伺服器接收請求成功處理,但在返迴響應報文中不含實體的主體部分
206(Partial Content) → 用戶端執行了範圍請求,而伺服器成功執行了這部分的GET請求
3XX:301 302 303 304 307
301(Moved Permanently) → 永久重新導向。表示請求的資源已被分配了新的URI,以後應使用資源現在所指的URI
302( Found) → 臨時重新導向。表示請求的資源已被分配了新的URI,希望使用者(本次)能使用新的 URI訪問
303(See Other) → 表示由於請求對應的資源存在著另一個URI,應使用 GET方法定向擷取請求的資源
304(Not Modified) → 表示用戶端發送附帶條件的請求時,伺服器端允許請求訪問資源,但未滿足條件的情況。
304狀態代碼返回時,不包含任何響應的主體部分
307(Temporary Redirect) → 臨時重新導向。與302有著相同的含義,但是302會將POST變換成GET,而307不會將POST變換成GET
4XX:400 401 403 404
400(Bad Request) → 表示請求的報文中存在語法錯誤
401(Unauthorized) → 表示發送的請求需要通HTTP認證的認證資訊,若之前已經進行過一次請求,這表示使用者認證失敗
403(Forbidden) → 表明對請求資源的訪問被伺服器拒絕
404(Not Found) → 表名在伺服器上無法找到請求的資源
5XX:500 503
500(Internal Server Error) → 表明伺服器端執行請求時發生了錯誤。也有可能是Web應用存在bug或某些臨時的故障
503(Service Unavailable) → 表明伺服器暫時處於超負載或進行中停機維護,現在無法執行請求
→回應標頭資訊
Age: 告知用戶端源服務端在多久前建立了響應(欄位單位為:秒)
若建立該響應的伺服器是快取服務器,Age值是指緩衝後的響應再次發起認證到認證完成的時間值。
代理建立響應時必須加上首部欄位Age
ETag: 告知用戶端響應實體資訊的標記,將資源唯一標識,
ETag由伺服器分配,沒有統一的演算法規則
Location:將接收方引導至另一個資源所在處
Server: 告知用戶端當前伺服器上安裝的HTTP伺服器應用程式的資訊。不單單會標出伺服器上的軟體應用程式名稱,
還有可能包括版本號碼和安裝時啟用的可選項
4、實體首部欄位(要求標頭資訊或者回應標頭資訊的欄位)
Content-Encoding: 對實體的主體部分選用的內容編碼方式
Content-Language:告知用戶端主體資訊使用的語言
Content-Length: 說明主體資訊的大小(位元組)
Content-Type: 說明主體資訊的檔案(媒體)類型
Set-Cookie: 服務端向用戶端寫Cookie內容資訊
Cookie: 用戶端向伺服器發送Cookie內容資訊
Http協議的基本原理(轉載)