http協議html
HTTP是一個屬於應用層的面向對象的協議,其主要特色爲: 1. 支持客戶端/服務器模式; 2. 簡單快速的通訊; 3. HTTP容許傳輸任意類型的數據對象。類型由Content-Type加以標記。 4. 無鏈接、無狀態協議;http報文web
用於HTTP協議交互的信息被稱爲HTTP報文。請求端(客戶端)的HTTP報文叫作請求報文,響應端(服務器端)的叫作響應報文。瀏覽器
請求報文和響應報文的首部內容由如下數據組成。緩存
請求行 包含用於請求的方法,請求URI和HTTP版本;服務器
狀態行 包含響應結果的狀態碼,緣由短語和Http版本;session
首部字段 通常有4種首部,分別是:通用首部、請求首部、響應首部和實體首部。app
其餘(Cookie等)ui
HTTP協議的請求和響應報文中一定包含HTTP首部。首部內容爲客戶端和服務器分別處理請求和響應提供 所須要的信息。編碼
下來對HTTP的經常使用首部字段進行詳細介紹url
HTTP首部字段根據實際用途被分爲如下4種類型。
通用首部字段(General Header Fields)請求報文和響應報文兩方都會使用的首部。
請求首部字段(Request Header Fields)從客戶端向服務器端發送請求報文時使用的首部。補充了請求的附加內容、客戶端信息、響應內容相關優先級等信息。
響應首部字段( Response Header Fields)從服務器端向客戶端返回響應報文時使用的首部。補充了響應的附加內容,也會要求客戶端附加額外的內容信息。
實體首部字段(Entity Header Fields)針對請求報文和響應報文的實體部分使用的首部。補充了資源內容更新時間等與實體有關的信息。
通用首部字段
首部字段名 | 說明 |
---|---|
Cache-Control | 控制緩存的行爲 |
Connextion | 逐跳首部、鏈接的管理 |
Date | 建立報文的日期時間 |
Pragma | 報文指令 |
Transfer-Encoding | 指定報文主體的傳輸編碼方式 |
Cache-control: max-age=5 表示當訪問此網頁後的5秒內再次訪問不會去服務器 Cache-Control: no-cache:這個很容易讓人產生誤解,令人誤覺得是響應不被緩存。 實際上Cache-Control: no-cache是會被緩存的,只不過每次在向客戶端(瀏覽器)提供響應數據時,緩存都要向服務器評估緩存響應的有效性。 Cache-Control: no-store:這個纔是響應不被緩存的意思。 Pragma: no-cache:跟Cache-Control: no-cache相同,Pragma: no-cache兼容http 1.0 ,Cache-Control: no-cache是http 1.1提供的。 所以,Pragma: no-cache能夠應用到http 1.0 和http 1.1,而Cache-Control: no-cache只能應用於http 1.1. 另外,客戶端不帶這個頭部請求的話,若是使用本地緩存的話,返回狀態碼爲304。 若是請求頭中有cache-control:no-cache頭部。則不使用本地緩存,返回狀態碼不爲304(通常爲200)。 這裏,剛好解決了我以前的一個問題: http://blog.chinaunix.net/uid-1757778-id-5753705.html
請求首部字段
首部字段名 | 說明 |
---|---|
Accept | 用戶代理可處理的媒體類型 |
Accept-Charset | 優先的字符集 |
Accept-Encoding | 優先的內容編碼 |
Accept-Language | 優先的語言 |
Host | 指定資源所在服務器 |
If-Match | 比較實體標記(ETag) |
If-Modified-Since | 比較資源的更新時間 |
If-None-Match | 比較實體標記(與If-Match相反) |
Referer | 對請求中URI的原始獲取方 |
User-Agent | Http客戶端程序的信息 |
Accept屬於請求頭,表示客戶端但願接收的數據類型。
這裏有對If-Modified-Since和Last-Modified的一些不錯的解釋,能夠點擊這裏查看
合理使用If-None-Match和If-Modified-Since頭,能夠減小流量帶寬。
響應首部字段
首部字段名 | 說明 |
---|---|
Accept-Range | 是否接受字節範圍請求 |
ETag | 資源的匹配信息 |
Location | 另客戶端重定向至指定URI |
Server | Http服務器的安裝信息 |
Vary | 代理服務器緩存的管理信息 |
實體首部字段
首部字段名 | 說明 |
---|---|
Allow | 資源可支持的Http方法 |
Content-Encoding | 實體主體適用的編碼方式 |
Content-Language | 實體主體的天然語言 |
Content-Length | 實體主體的大小(字節) |
Content-Location | 替代對應資源的URI |
Content-Type | 實體主體的媒體類型 |
Expires | 實體主體過時的日期時間 |
Last-Modified | 資源的最後修改日期時間 |
從以上這些以外,還有好比Cookie、Set-Cookie和Content-Disposition等在其餘RFC中定義的首部字段也常常被用到。
下邊爲請求一個網頁的頭部信息實例:
General: Request URL:http://blog.csdn.net/muzizongheng/article/details/46795243 Request Method:GET Status Code:200 OK Remote Address:59.110.88.38:80 Referrer Policy:unsafe-url Response Header: Cache-Control:private, max-age=0, must-revalidate Connection:keep-alive Content-Encoding:gzip Content-Type:text/html; charset=utf-8 Date:Mon, 17 Jul 2017 11:16:17 GMT ETag:W/"ac50f3b564a78d9d789c1aa58f6ae866" Keep-Alive:timeout=20 Server:openresty Transfer-Encoding:chunked Vary:Accept-Encoding X-Powered-By:PHP 5.4.28 Request Headers: Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding:gzip, deflate, sdch Accept-Language:zh-CN,zh;q=0.8 Cache-Control:max-age=0 Connection:keep-alive Cookie:uuid_tt_dd=144036427222764724_20151210; bdshare_firstime=1449739242207; UN=qq_32072475; UE=""; BT=1487900862896; uuid=2f6e329e-9f88-4865-8122-f9b62fdbb659; avh=62976388%2c46795243; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1500288834,1500289008,1500290189,1500290200; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1500290200; dc_tos=ot8fbt; dc_session_id=1500290201006 Host:blog.csdn.net If-None-Match:W/"ac50f3b564a78d9d789c1aa58f6ae866" Referer:https://www.baidu.com/link?url=Wu7VlsW2GRUpclU_zgZy9v_qJkZl1rHrjCTURquEV9PS0fEb1W5xkKsGoufmZVycG5aA8jlSdONEoM8d8mMbuP7vx91QgDaeU5eN7ty9WK7&wd=&eqid=ec2de144000058ef00000006596c9c69 Upgrade-Insecure-Requests:1 User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36