客戶端經過請求頭,告訴服務器要請求的資源,同時還會附帶一些其餘的信息,那麼這些請求信息想表達什麼意思呢?web
上圖能夠看到,chrome瀏覽器就是一個客戶端,在請求oschina主頁資源時,HTTP請求中所包含的請求頭信息:算法
Accept:告訴服務器,客戶端能夠接受的資源類型,能夠是一個類型,也能夠是多個類型,多個類型間用逗號分隔開 特殊的*/*表示什麼類型均可以;q表示但願返回資源的級別,沒有的話默認是1,顯示寫的話一般在類型後用分號分開,每每是一個鍵值對的形式,如q=0.8。一般服務器會響應一個Content-type的響應頭信息。chrome
Accept-Encoding:告訴服務器,客戶端支持什麼樣的壓縮算法,能夠爲一個值或多個值,用逗號分開,經常使用的壓縮算法有gzip。服務器在收到這個字段後,會檢查服務器是否支持這個算法,若是支持,就會在發回響應信息前,對資源進行壓縮,這樣能夠減少響應資源的大小。一般服務器會響應一個Content-Encoding:gzip的響應頭信息。瀏覽器
Accept-Language:告訴服務器,客戶端但願服務器返回的語言格式,對於支持國際話的服務端來講,這個字段很重要,能夠經過這個字段,返回不一樣語言的資源緩存
Cache-Control:這個值告訴服務器客戶端但願的緩存策略,若是出如今客戶端的請求頭中,值每每是max-age=0,告訴服務器,客戶端是不緩存服務器資源的安全
Connection:客戶端發送的值每每是keep-alive,這個值告訴服務器本身打開的是一個長tcp鏈接,服務器接受到這個值後,若是接受這個長鏈接,就會返回Connection:keep-alive,這樣當客戶端再有請求發送時,就會重用這個tcp鏈接;若是不接受長鏈接就會返回Connection:close。正確的理解keep-alive必須對tcp/ip協議有必定的瞭解服務器
Cookie:這個值是服務器存儲在客戶端的數據,cookie是一組鍵值對,用;分隔開。Cookie有不少重要的知識點,對web開發人員來講極其重要,之後會單獨來講明。cookie
Host:這個值對應的是服務器域名或者ip地址。網絡
User-Agent:這個值描述了客戶端的詳細信息。若是你想寫一個簡單的爬蟲軟件,沒有這個字段的話,是會被一些服務器攔截的(曾經爬網易的時候就遇到過這個問題)。tcp
上面的這些是chrome請求oschina時的請求頭信息,HTTP協議規定的請求頭固然遠遠不止上面說的這些,下面咱們再說一些比較經常使用的請求頭:
Referer:當點擊某個網頁的的a標籤時或者表單提交時,會帶上這個值,告訴服務器,這個請求時從哪一個頁面來的,這樣服務器經過這個值就能夠統計流量都是從哪裏來的,一些廣告服務提供商就是靠這個值來收費的。
if-modified-since:這個值是服務器上次響應時請求時發送給客戶端的date時間,若是服務器看到這個字段,若是在這段時間沒有修改過資源,服務器就會返回304 not modified,若是修改了,就返回資源。
if-none-match:這個值的意義跟if-modified-since同樣,也是一個條件請求,但這個值比上面的值有加強效果,由於文件即便修改時間變了,不必定說明資源變了。
Range:能夠告訴服務器,只請求資源的一段,值能夠是這樣bytes=100-1000,經過這個,能夠作到斷點下載。
Authorization:當服務器資源須要權限才能訪問時,客戶端會帶上這個請求頭信息,將認證信息經過這個字段傳遞給服務器,一般這個值會採用base64編碼,將username:password類型的值編碼後經過網絡傳遞給服務器,由於base64編碼是可逆的,不夠安全,因此如今的安全控制不多用這種方式,通常是用https。