請求 header 就是客戶端發送 http 訊息給伺服端所要補充的附加訊息。
Accept: text/html, application/xhtml+xml...
這個字串可以告訴伺服器,客戶端需要能處理的媒體類型和相對的優先順序。
使用的是 type/subtype 型式,可以一次指定多種媒體的方式。
如果需要優先順序,使用 q=
來表示權重,範圍是0~1
,可細分至小數點後三位,並用分號分隔,默認權重是 q=1.0
。
Accept-Charset: iso-8859-5, unicode1-1;q=0.8
這個字串用來通知伺服器客戶端所支援的字串集,及相對順序,一樣可以使用 q 值來表示優先順序。
Accept-Charset: gzip, deflate
這個字串用來通知伺服器客戶端所支援的編碼,及相對順序,可以一次指定多種編碼。
Accept-Language: zh-cn,zh;q=0.7
這個字串用來通知伺服器客戶端所支援的語言,及相對優先順序,一樣可以使用 q 值來表示優先順序。
Authorization: Basic dWVde3fs..
這個字串通常是還告訴伺服器,用戶代理的認證訊息。通常想要通過伺服器的用戶代理收到回傳的 401 狀態碼之後,會把Authorization
加入請求中。共用緩存在接收到 Authorization 的請求操作會有所差異。
Expect: 100-continue
用戶端用此字串來告訴伺服端,希望伺服端做出某種特別的行為,如果伺服端無法達成就會回傳 417 狀態碼。
Form: info@hacker.jp
這個字串用來告知伺服器用戶代理的用戶電子郵件地址。通常是為了顯示搜尋引擎等的用戶代理負責人的電子郵件聯繫方式,使用代理時盡量用這個字串,但可能因為代理不同而顯示在 User-Agent 中。
這個字串會告訴伺服器,請求的資料所在的網路主機名稱和埠號,在 Http/1.1 中是唯一一個必須要包含在內的字串部。
Host 對於單台伺服器分配多個域名的虛擬主機工作機制有很密切的關係。
請求被發送到伺服器時,請求的主機名會用 IP 位置來替換處理,如果相同 IP 位置下部署多個域名,那個伺服器就會無法了解是哪個對應的域名做請求,因此就需要 host 來指出請求的主機名稱。
像是以If-
開頭的請求字串,皆為條件請求,伺服器接收到附帶條件請求後,只有判斷的條件為真才會執行請求。
If-Match: "12345"
這個字串會先告訴伺服器 ETag 值,當值與伺服器的相同才會執行請求,如果不同就會回傳 412 狀態碼。
還可以使用星號(*) 指定 If-Match 字串,這時候就會忽略 ETag 值,只要有資料就會進行處理。
這個字串會告訴伺服器,如果 If-Modified-Since 的值早於資料更新的時間,就處理該請求,如果在此日期之後就回傳 304 狀態碼。
If-Modified-Since 是要確認代理與客戶端所有的本地資料的有效性,獲取資料更新的日期和時間可確認伺服端的 Last-Modified 字串。
這個字串和 If-Match 的作用相反,ETag 值不一致才會處理該請求,在 Get 或 HEAD 方法中使用此字串就可以取得最新的資料。
If-Range: "132455"
這個字串告訴伺服器如果指定的 If-Range 值(可能是 ETag 或時間)和請求資料的 ETag 或時間相同,就做範圍請求處理,此時伺服端會回傳 Content-Range 及 Content-Length 字串,如果不是的話就回傳全部資料。
如果不使用 If-Range 的話,伺服器的資料如果更新,那客戶端手上有一部份的資料可能就會無效,這時候伺服端會回傳 412 狀態,目的是催促客戶端再次發送請求。
比較下來不使用 If-Range ,需要耗費兩倍時間。
此字串和 If-Modified-Since 相反,他的作用是告訴伺服器,指定的請求資料只能在值指定的時間後,且沒發生更新的狀況才能處理請求,如果在指定時間後發生更新,就以狀態碼 412 回傳。
Max-Forwards: 10
藉由 Trace 或 option 方法,發送包含這個字串的請求時,這個字串以十進位整數的方式指定可經過伺服器最大數目,伺服器在轉發請求給下個伺服器前,會將 Max-Forwards 的值減一之後再重新賦值,當收到 Max-Forwards 的值為 0 後,就不再進行轉發請求。
需要這樣是因為當 HTTP 通訊的時候,請求可能會經過多台代理伺服器,如果這些代理伺服器因為某些原因而請求轉發失敗,客戶端就無從得知,所以必須通過此字串來追蹤請求。
接到從代理伺服器的憑證,客戶端會發送此字串 Proxy-Authorization 的請求,以告知伺服器憑證所需要的資訊。
這個動作和客戶端與伺服器之間的 HTTP 訪問認證相似,但差別在這是發生在客戶端與代理之間。
對於要獲取部分資料的範圍請求,Range 可以告訴伺服器指定的範圍。
接收到 Range 字串請求的伺服器,會在處理請求後回傳 206 狀態碼,如果無法處理就會回傳所有資料及 200 狀態碼。
這個字串是告訴伺服器原始資料的 URI。客戶端一般來說都會發送 Referer 字串,但直接在瀏覽器地址輸入 URI,基於安全也可以不發此字串。
因為原始資料的 URI 的查詢字串也可能含有 ID 和密碼等重要資訊,如果寫進 Referer 轉發給其他伺服器可能會造成保密訊息外洩。
這個字串主要告知伺服器,客戶端能夠處理回應的傳輸編碼方式及優先順序,他和 Accept-Encoding 的功能很像,但是用在傳輸編碼。
除了指定編碼外,他還可以指定伴隨的 trailer 分快傳輸編碼的方式,應用後者只需要把 trailer 賦值給該字串。
用於傳達瀏覽器種類,User-Agent 會建立請求瀏覽器和用戶代理等等訊息給伺服端。
如果由網路爬蟲請求,可能會在這個字串被加上爬蟲作者的電子郵件,如果請求經過代理,那也可能會被加上代理伺服器的名稱。
資料來源:《圖解 HTTP》 上野宣 人民郵電出版社
筆記純屬推廣及分享,如有侵權,請告知。
Please advise to remove immediately if any infringement caused.