本次分享http協議,共分爲三部分,這是第二部分,主要講解請求與響應的字段,以及狀態碼。html
以http/1.1版本的一個完整的請求與響應做爲例子nginx
http請求信息由三部分組成json
一、請求方法(GET/POST)、URI、協議/版本瀏覽器
二、請求頭(Request Header)緩存
三、請求正文服務器
eg:app
GET /form.html HTTP/1.1 (CRLF)
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms- powerpoint,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)編碼
第一行分別爲 請求方法GET URL:form.html 協議版本:HTTP/1.1url
第二行 Accept:聲明能夠接收哪些數據格式spa
第三行 Accept-Language:聲明能夠支持什麼語言
第四行 Accept-Encoding:聲明支持的編碼格式
第五行 If-Modified-Since:聲明該文件的最後修改時間
第六行 If-None-Match:用來判斷當前請求的資源是否改變
第七行 User-Agent:用戶代理,存儲一些瀏覽器信息以及系統信息
第八行 Host:請求資源所在的服務器
第八行 Connection:聲明是持久鏈接
CRLF 回車換行
--------------------------------------------------------------------------------------------------------------------------------------
這裏是經常使用的請求字段解釋
Accept 用戶代理可處理的媒體類型
Accept-Charset 優先的字符集
Accept-Encoding 優先的內容編碼
Accept-Language 優先的語言(天然語言)
Authorization Web認證信息
Expect 期待服務器的特定行爲
From 用戶的電子郵箱地址
Host 請求資源所在服務器
If-Match 比較實體標記(ETag)
If-Modified-Since 比較資源的更新時間
If-None-Match 比較實體標記(與 If-Match 相反)
If-Range 資源未更新時發送實體 Byte 的範圍請求
If-Unmodified-Since 比較資源的更新時間(與If-Modified-Since相反)
Max-Forwards 最大傳輸逐跳數
Proxy-Authorization 代理服務器要求客戶端的認證信息
Range 實體的字節範圍請求
Referer 對請求中 URI 的原始獲取方
TE 傳輸編碼的優先級
User-Agent HTTP 客戶端程序的信息
HTTP應答與HTTP請求類似,HTTP響應也由3個部分構成,分別是:
一、狀態行
二、響應頭(Response Header)
三、響應正文
eg:
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 31 May 2016 02:09:24 GMT
Content-Type: application/json;charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With,access_token,access-token,content-type,multipart/form-data,application/x-www-form- urlencoded
Access-Control-Allow-Methods: GET,POST,OPTIONS
Content-Length: 49
{"resultCode":1,"resultMsg":"手機號未註冊"}
第一行: 協議版本http/1.1 狀態碼 200 狀態描述 OK
第二行: 告知客戶端當前服務器上安裝的http服務器應用程序的信息。其中包含軟件應用名稱,甚至版本號和安裝時的啓動項
第三行: 響應時間
第四行: 實體主體的媒體類型
第五行: 聲明長鏈接
第六行: 控制緩存的管理信息
第七行: 聲明容許任何
第八行: 聲明容許任何人訪問
第九行: 設置容許訪問的請求方法
第十行: 指明正文長度
空行: 代表響應頭結束
響應正文
----------------------------------------------------------------------------------------------------------------------------------------
下面是一些常見的響應字段
Accept-Ranges 是否接受字節範圍請求
Age 推算資源建立通過時間
ETag 資源的匹配信息
Location 令客戶端重定向至指定URI
Proxy-Authenticate 代理服務器對客戶端的認證信息
Retry-After 對再次發起請求的時機要求
Server HTTP 服務器的安裝信息
Vary 代理服務器緩存的管理信息
WWW-Authenticate 服務器對客戶端的認證信息
Allow 資源可支持的HTTP方法
Content-Encoding 實體主體適用的編碼方式
Content-Language 實體主體的天然語言
Content-Length 實體主體的大小(單位:字節)
Content-Location 替代對應資源的URI
Content-MD5 實體主體的報文摘要
Content-Range 實體主體的位置範圍
Content-Type 實體主體的媒體類型
Expires 實體主體過時的日期時間
Last-Modified 資源的最後修改日期時間
----------------------------------------------------------------------------------------------------------------------------------
響應狀態碼詳解
狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操做
4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現
5xx:服務器端錯誤--服務器未能實現合法的請求
常見的狀態碼詳解
100 Continue 繼續。客戶端應繼續其請求。
101 Switching Protocols 切換協議。服務器根據客戶端的請求切換協議。只能切換到更高級的協議,例如,切換到HTTP的新版本協議
200 OK 表示從客戶端發來的請求在服務器端被正常處理了。
204 No Content 該狀態碼錶示服務器接收的請求已成功處理,但在返回的響應報文中不含實體的主體部分。好比,當從瀏覽器發出請求處理後,返回204響應,那麼瀏覽器顯示的頁面不發生更新
206 Partial Content 該狀態碼錶示客戶端進行了範圍請求,而服務器成功執行了這部分的GET請求。
301 Moved Permanently 永久性重定向。該狀態碼錶示請求的資源已經被分配了新的URI,之後應使用資源如今所指的URI。 像下方給出的請求URI,當指定的資源路徑的最後忘記添加斜槓"/",就會產生301狀態碼
302 Found 臨時性重定向。該狀態碼錶示請求的資源已被分配了新的URI,但願用戶(本次)能使用新的URI訪問。
303 See Other 該狀態碼錶示因爲請求對應的資源存在另一個URI,應使用GET方法定向獲取請求的資源。 303狀態碼和302狀態碼有着相同的功能,但303狀態碼明確代表客戶端應當採用GET方法獲取資源。 當301,302,303響應狀態碼返回時,幾乎全部的瀏覽器都會把POST改爲GET,並刪除請求報文的主體,以後請求會自動再次發送。 301,302標準是禁止將POST方法改變成GET方法的,但實際上使用時你們都會這麼作。
304 Not Modified 該狀態碼錶示客戶端發送附帶條件的請求時,服務器端容許請求訪問資源,但未知足條件的狀況。304狀態碼返回時,不包含任何響應的主體部分。304雖然被劃分在3XX類別中,可是和重定向沒有關係。
307 Temporary Redirect 臨時重定向。該狀態碼與302 Found有着相同的含義。307會遵守瀏覽器標準,不會從POST變成GET。
400 Bad Request 該狀態碼錶示請求報文中存在語法錯誤。當錯誤發生時,須要修改請求的內容後再次放鬆請求。
401 Unauthorized 該狀態碼錶示發送的請求須要有經過HTTP認證的認證信息,另外若以前已進行過1此請求,則表示用戶認證失敗。
403 Forbidden 該狀態碼代表對請求資源的訪問被服務器拒絕了。
404 Not Found 該狀態碼代表服務器上沒法找到請求的資源。除此以外,也能夠在服務器端拒絕請求且不想說明理由時使用。
500 Internal Server Error 該狀態碼代表服務器端在執行請求時發生了錯誤。
503 Service Unavailable 該狀態碼代表服務器暫時處於超負載或正在進行停機維護,如今沒法處理請求。