iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 11
0
自我挑戰組

寇丁人妻的前端書蟲日誌系列 第 11

DAY11: 圖解 HTTP Chapter06 HTTP 首部 筆記精要(請求首部篇)

  • 分享至 

  • xImage
  •  

請求首部字段

請求 header 就是客戶端發送 http 訊息給伺服端所要補充的附加訊息。

Accept

Accept: text/html, application/xhtml+xml...

這個字串可以告訴伺服器,客戶端需要能處理的媒體類型和相對的優先順序。
使用的是 type/subtype 型式,可以一次指定多種媒體的方式。

  • 文字文件
    • text/html, text/plain, text/css ...
  • 圖片文件
    • images/jpeg, image/gif ...
  • 影音文件
    • video/mpeg, video/quicktime ...
  • 應用程序所使用的二進制文件
    • application/zip ...

如果需要優先順序,使用 q= 來表示權重,範圍是0~1,可細分至小數點後三位,並用分號分隔,默認權重是 q=1.0

Accept-Charset

Accept-Charset: iso-8859-5, unicode1-1;q=0.8

這個字串用來通知伺服器客戶端所支援的字串集,及相對順序,一樣可以使用 q 值來表示優先順序。

Accept-Encoding

Accept-Charset: gzip, deflate

這個字串用來通知伺服器客戶端所支援的編碼,及相對順序,可以一次指定多種編碼。

Accept-Language

Accept-Language: zh-cn,zh;q=0.7

這個字串用來通知伺服器客戶端所支援的語言,及相對優先順序,一樣可以使用 q 值來表示優先順序。

Authorization

Authorization: Basic dWVde3fs..

這個字串通常是還告訴伺服器,用戶代理的認證訊息。通常想要通過伺服器的用戶代理收到回傳的 401 狀態碼之後,會把Authorization 加入請求中。共用緩存在接收到 Authorization 的請求操作會有所差異。

Expect

Expect: 100-continue

用戶端用此字串來告訴伺服端,希望伺服端做出某種特別的行為,如果伺服端無法達成就會回傳 417 狀態碼。

Form

Form: info@hacker.jp

這個字串用來告知伺服器用戶代理的用戶電子郵件地址。通常是為了顯示搜尋引擎等的用戶代理負責人的電子郵件聯繫方式,使用代理時盡量用這個字串,但可能因為代理不同而顯示在 User-Agent 中。

Host

這個字串會告訴伺服器,請求的資料所在的網路主機名稱和埠號,在 Http/1.1 中是唯一一個必須要包含在內的字串部。

Host 對於單台伺服器分配多個域名的虛擬主機工作機制有很密切的關係。
請求被發送到伺服器時,請求的主機名會用 IP 位置來替換處理,如果相同 IP 位置下部署多個域名,那個伺服器就會無法了解是哪個對應的域名做請求,因此就需要 host 來指出請求的主機名稱。

If-Match

像是以If-開頭的請求字串,皆為條件請求,伺服器接收到附帶條件請求後,只有判斷的條件為真才會執行請求。

If-Match: "12345"

這個字串會先告訴伺服器 ETag 值,當值與伺服器的相同才會執行請求,如果不同就會回傳 412 狀態碼。

還可以使用星號(*) 指定 If-Match 字串,這時候就會忽略 ETag 值,只要有資料就會進行處理。

If-Modified-Since

這個字串會告訴伺服器,如果 If-Modified-Since 的值早於資料更新的時間,就處理該請求,如果在此日期之後就回傳 304 狀態碼。

If-Modified-Since 是要確認代理與客戶端所有的本地資料的有效性,獲取資料更新的日期和時間可確認伺服端的 Last-Modified 字串。

If-None-Match

這個字串和 If-Match 的作用相反,ETag 值不一致才會處理該請求,在 Get 或 HEAD 方法中使用此字串就可以取得最新的資料。

If-Range

If-Range: "132455"

這個字串告訴伺服器如果指定的 If-Range 值(可能是 ETag 或時間)和請求資料的 ETag 或時間相同,就做範圍請求處理,此時伺服端會回傳 Content-Range 及 Content-Length 字串,如果不是的話就回傳全部資料。

如果不使用 If-Range 的話,伺服器的資料如果更新,那客戶端手上有一部份的資料可能就會無效,這時候伺服端會回傳 412 狀態,目的是催促客戶端再次發送請求。

比較下來不使用 If-Range ,需要耗費兩倍時間。

If-Modified-Since

此字串和 If-Modified-Since 相反,他的作用是告訴伺服器,指定的請求資料只能在值指定的時間後,且沒發生更新的狀況才能處理請求,如果在指定時間後發生更新,就以狀態碼 412 回傳。

Max-Forwards

Max-Forwards: 10

藉由 Trace 或 option 方法,發送包含這個字串的請求時,這個字串以十進位整數的方式指定可經過伺服器最大數目,伺服器在轉發請求給下個伺服器前,會將 Max-Forwards 的值減一之後再重新賦值,當收到 Max-Forwards 的值為 0 後,就不再進行轉發請求。

需要這樣是因為當 HTTP 通訊的時候,請求可能會經過多台代理伺服器,如果這些代理伺服器因為某些原因而請求轉發失敗,客戶端就無從得知,所以必須通過此字串來追蹤請求。

Proxy-Authorization

接到從代理伺服器的憑證,客戶端會發送此字串 Proxy-Authorization 的請求,以告知伺服器憑證所需要的資訊。

這個動作和客戶端與伺服器之間的 HTTP 訪問認證相似,但差別在這是發生在客戶端與代理之間。

Range

對於要獲取部分資料的範圍請求,Range 可以告訴伺服器指定的範圍。

接收到 Range 字串請求的伺服器,會在處理請求後回傳 206 狀態碼,如果無法處理就會回傳所有資料及 200 狀態碼。

Referer

這個字串是告訴伺服器原始資料的 URI。客戶端一般來說都會發送 Referer 字串,但直接在瀏覽器地址輸入 URI,基於安全也可以不發此字串。

因為原始資料的 URI 的查詢字串也可能含有 ID 和密碼等重要資訊,如果寫進 Referer 轉發給其他伺服器可能會造成保密訊息外洩。

TE

這個字串主要告知伺服器,客戶端能夠處理回應的傳輸編碼方式及優先順序,他和 Accept-Encoding 的功能很像,但是用在傳輸編碼。

除了指定編碼外,他還可以指定伴隨的 trailer 分快傳輸編碼的方式,應用後者只需要把 trailer 賦值給該字串。

User-Agent

用於傳達瀏覽器種類,User-Agent 會建立請求瀏覽器和用戶代理等等訊息給伺服端。

如果由網路爬蟲請求,可能會在這個字串被加上爬蟲作者的電子郵件,如果請求經過代理,那也可能會被加上代理伺服器的名稱。

資料來源:《圖解 HTTP》 上野宣 人民郵電出版社
筆記純屬推廣及分享,如有侵權,請告知。
Please advise to remove immediately if any infringement caused.


上一篇
DAY10: 圖解 HTTP Chapter06 HTTP 首部 筆記精要(通用首部篇)
下一篇
Day12:圖解 HTTP Chapter06 HTTP 首部 筆記精要(回應首部篇)
系列文
寇丁人妻的前端書蟲日誌30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言