HTTP請求報文組成:請求行+請求頭+請求體
注意:請求體和URL都可以傳遞請求參數。
常見請求頭屬性:
1.Accept 作用:瀏覽器客戶端用來告訴服務端能接受什么類型的響應。
例如: Accept: text/html 代表瀏覽器可以接受服務器回發html文檔,如果服務器無法返回text/html類型的數據,服務器應該返回一個406錯誤(non acceptable)
通配符 * 代表任意類型。如: Accept: */* 代表瀏覽器可以處理所有類型
2.Accept-Encoding 作用:瀏覽器客戶端用來告訴服務器能接受什么編碼格式,包括字符編碼、壓縮方式等
例如:Accept-Encoding:gzip, deflate
3.Accept-Language 作用:瀏覽器客戶端用來告訴服務器能接受什么語言。
例如:Accept-Language:zh-CN,zh;q=0.9
4.Connection 作用:客戶端或服務端用來告訴對方當前tcp連接的狀態,默認為keep-alive,即長連接。
例如:Connection:close 在響應結束后關閉連接
5.Host 作用:指定要請求的資源所在的主機和端口,通常從url里獲取。這個字段是必需的。
例如:我們在地址欄輸入:http://www.baidu.com Host:www.baidu.com
6.Referer 作用:瀏覽器客戶端用來告訴服務器這個請求是從哪個頁面鏈接過來的,即請求來源。
7.User-Agent 作用:告訴服務器,客戶端使用的操作系統、瀏覽器版本和名稱
例如:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
另外,有些屬性不一定會有但比較常見:
1.Cache-Control 作用:客戶端瀏覽器用來判斷是否需要用本地緩存。默認值為private;常用值有private、no-cache、max-age、must-revalidate。具體場景舉例:
a.打開新窗口時值為private、no-cache、must-revalidate,那么打開新窗口訪問時都會重新訪問服務器。而如果指定了max-age值(單位為秒),那么在此值內的時間里就不會重新訪問服務器,例如:
Cache-control: max-age=5(表示當訪問此網頁后的5秒內再次訪問不會去服務器)
b.在地址欄回車
值為private或must-revalidate則只有第一次訪問時會訪問服務器,以后就不再訪問。
值為no-cache,那么每次都會訪問。
值為max-age,則在過期之前不會重復訪問。
c.按后退按扭
值為private、must-revalidate、max-age,則不會重訪問,
值為no-cache,則每次都重復訪問
d.按刷新按扭
無論為何值,都會重復訪問
2.Cookie 作用:客戶端瀏覽器用來存儲一些用戶信息以便讓服務器辨別用戶身份的(大多數需要登錄的網站上面會比較常見),比如用戶名和密碼,sessionId等。
3.If-Modify-Since 作用:把瀏覽器端緩存頁面的最后修改時間(精確到秒)發送到服務器去,服務器會把這個時間與服務器上實際文件的最后修改時間進行對比。如果時間一致,那么返回304,客戶端就直接使用本地緩存文件。如果時間不一致,就會返回200和新的文件內容以及新的修改時間(Last-Modify)。客戶端接到之后,會丟棄舊文件,把新文件緩存起來,並顯示在瀏覽器中。
例如:Wed, 30 May 2018 08:32:42 GMT
4.If-None-Match 作用:If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 當用戶再次請求該資源時,將在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服務器驗證資源的ETag沒有改變(該資源沒有更新),將返回一個304狀態告訴客戶端使用本地緩存文件。否則將返回200狀態和新的資源和Etag. 使用這樣的機制將提高網站的性能。
例如: If-None-Match: W/"3119-1437038474000"
注意:If-Modify-Since和If-None-Match都可以給服務器用來判斷所請求的文件距離上次訪問之間是否被修改過,不過If-Modify-Since只能精確到秒,而If-None-Match只要文件修改過就會變化。
Etag的使用場景:1.有些文件需要頻繁更新,但是文件內容並沒有變化。
2.同一文件存儲在多台web服務器中,用戶請求在多台之間輪詢。