1. 程式人生 > 前端設計 >HTTP1.1 Headers速查清單——首部含義解析

HTTP1.1 Headers速查清單——首部含義解析

作為一個程式猿,瞭解常用的HTTP首部的意思及它的使用場景是必須的,但是由於http首部數量太多,平常經常接觸到的就那麼一些,不常用的很容易忘記具體意思,為了方便檢視特整理如下。

http首部主要分為五大部分:

1. 通用首部:各種型別的報文(請求、響應報文)都可以使用,提供有關報文最基本的資訊。
2. 請求首部:專用於請求報文的首部,用於給伺服器提供相關資訊,告訴伺服器客戶端的期望和能力。
3. 響應首部:專用於響應報文的首部,用於告訴客戶端是誰在響應以及響應者的能力。
4. 實體首部:用於描述http報文的負荷(主體),提供了有關實體及其內容的相關資訊。
5. 擴充套件首部:非標準首部,由應用開發者定義的首部。
複製程式碼

通用首部

​ 通用首部又可以分為以下幾類:

1. 通用資訊性首部。
2. 通用快取首部。
複製程式碼

通用資訊性首部

  • Connection:客戶端和伺服器可以指定與請求/響應連線相關選項;connection首部具有兩個功能,第一個就是去除標準的逐跳首部(Connection、Transfer-Encoding、TE、Proxy-Authorization、Proxy-Authenticate、Upgrade、Keep-Alive和Trailer),也就是去掉不再轉發給代理的首部,這些需要去除的首部在Connection首部中列出;第二個就是保持持久連線,HTTP1.1預設就是持久連線,如果客戶端和伺服器任意一端想中斷連線就可以使用Connection: close,HTTP1.1以前的版本預設不是持久連線,因此如果想開啟持久連線可以使用Connection: Keep-Alive。
  • Date:報文建立日期和時間。
  • MIME-Version:報文傳送方遵循的MIME版本。
  • Trailer:如果報文采用分塊傳輸編碼(chunked transfer encoding),那麼這個首部將會列出拖掛部分的首部集合(報文主體後面使用的首部集合)。
  • Transfer-Encoding:傳輸的報文采用的編碼方式。
  • Update:傳送方想要使用的升級版本或者協議。
  • Via:報文經過的中間節點(代理、閘道器等)。
  • Upgrade:用於檢測http協議或者其他協議是否有可用的更高版本,其值也可以指定一個完全不同的協議名。

通用快取首部

  • Cache-Control:傳輸快取指令,用於實現快取機制,大致上可以分為快取請求指令和快取響應指令兩大類:

    • 快取請求指令:

      1. no-store:不快取客戶端請求和伺服器響應,即不進行快取。
      2. no-cache:在釋出快取資源之前,必須向源端伺服器進行驗證。
      3. max-age:設定快取有效時長,超過這個時長快取將失效。
      4. min-fresh:客戶端期望獲取在指定時間保持最新狀態的響應。
      5. max-stale:表明客戶端願意接受一個已經過期的資源,但是過期時間不能超過指定時長。
      6. no-transform:不能夠對資源進行轉換或者轉變,代理不能夠修改Content-type、Content-Rage和Content-Encoding等HTTP頭。
      7. only-if-cached:客戶端只接受已快取的資源。
    • 快取響應指令:

      1. no-store:不快取客戶端請求和伺服器響應,即不進行快取。
      2. no-cache:在釋出快取資源之前,必須向源端伺服器進行驗證。
      3. must-revalidate:在資源過期之後,未向伺服器成功驗證之前,不能夠使用快取進行響應。
      4. no-transform:不能夠對資源進行轉換或者轉變,代理不能夠修改Content-type、Content-Rage和Content-Encoding等HTTP頭。
      5. public:允許任何物件快取(代理伺服器、客戶端)響應,即使是通常不可快取的內容(1. 沒有max-age指令或者Expires訊息頭,2. post請求響應)。
      6. private:響應只允許單使用者(比如使用者瀏覽器)進行快取,任何中間節點都不能快取響應。
      7. max-age:設定快取有效時長,超過這個時長快取將失效。
      8. proxy-revalidate:和must-revalidate的效果一樣,但是僅用於共享快取(比如代理),私有快取會被忽略。
      9. s-maxage:覆蓋max-age和Expires首部,僅限用共享快取,私有快取會被忽略。

      ?ps:共享快取和私有快取的區別就是快取的資源能否能提供給多個使用者使用,私有快取的資源只能給單使用者使用。

  • Pragma:HTTP1.0規範中的首部,具體表現取決於實現,因此可能具有不一樣的效果;除非是在只支援HTTP1.0版本的應用程式中才使用該首部,否則其他情況下都應該優先考慮Cache-Control首部;理論上該首部的效果和Cache-Control: no-cache的效果一樣,但是因為具體表現得參考實現。

請求首部

​ 請求首部還可以分為以下幾類:

1. 請求資訊性首部。
2. 條件請求首部。
3. 安全請求首部。
4. 代理請求首部。
複製程式碼

請求資訊性首部

  • Client-IP:提供了客戶端的IP地址。
  • From:提供了客戶端使用者的郵件地址。
  • Host:提供了接受請求的伺服器主機名和埠號。
  • Referer:提供了包含當前請求的文件URI。
  • UA-Color:提供了客戶端顯示器顏色相關資訊。
  • UA-CPU:提供了客戶端CPU的型別或製造商。
  • UA-Disp:提供了客戶端顯示器能力的相關資訊。
  • UA-OS:提供了執行在客戶端的作業系統名稱和版本。
  • UA-Pixels:提供了客戶端顯示器的畫素資訊。
  • User-Agent:將發起請求的應用程式告訴伺服器。

?ps:UA-*和Client-IP首部並不是規範中的內容,只是有客戶端實現。


  • Accept:告訴伺服器客戶端可以接受(處理)的媒體型別,使用MIME型別表示。
  • Accept-Charset:告訴伺服器客戶端可以接受(處理)的字符集型別。
  • Accept-Encoding:告訴伺服器客戶端可以接受的內容編碼方式。
  • Accept-Language:告訴伺服器客戶端可以接受哪些語言。
  • TE:告訴伺服器可以使用哪些擴充套件傳輸編碼。

條件請求首部

  • Expect:可以向伺服器列出所期望的行為,HTTP1.1規範只列出了一個期望條件:100 Continue。
  • If-Match:如果實體標記與文件當前的實體標記一致,那麼就獲取此文件。
  • If-Modified-Since:如果在指定的日期時間(響應頭Last-Modified)之後資源有被修改過,就重新獲取這份資源,否則就使從快取中取資源的副本。
  • If-None-Match:如果實體標記(Etag)與文件當前的實體標誌不一致,就獲取此文件。
  • If-Range:在一定條件下Range首部生效,值可以為etag或者時間。
  • If-Unmodified-Since:如果在指定的日期時間之後資源沒有被修改過,就重新獲取這份資源,否則就使從快取中取資源的副本。
  • Range:如果伺服器支援範圍請求,則請求資源的指定的範圍。

安全請求首部

  • Authorization:向伺服器提供能夠驗證客戶端身份的資料,由兩部分組成 <type> <credetials>,type代表驗證型別;credetials代表驗證令牌。
  • Cookie:從客戶端傳送資料給服務端,通常情況下用於傳輸會話ID,傳送給伺服器的資料按理來說是來自於伺服器上一次返回給客戶端的。
  • Cookie2:用來說明請求端的cookie版本。

代理請求首部

  • Max-Farward:在將請求傳送給源端伺服器時,經過代理伺服器和閘道器等中間節點的最大次數。
  • Proxy-Authorization:與Authorization首部的作用一樣,只是這裡是客戶端提供給代理伺服器的用於驗證身份的憑證,通常是在伺服器返回407狀態碼及Proxy-Authenticate的時候傳送。
  • Proxy-Connection:與Connection首部的作用一樣,只是這裡是在與代理建立連線的時候使用。

響應首部

​ 響應首部也可以分為以下幾類:

1. 響應資訊性首部。
2. 協商首部。
3. 安全響應首部。
複製程式碼

響應資訊性首部

  • Age:表示響應已存在時間(從建立響應開始計算,單位秒)。
  • Public:表示伺服器為該資源支援的請求方法列表。
  • Retry-After:如果資源不可用的話,應該在時間點之後再次進行嘗試;通常用於503狀態碼伺服器暫時維護或者升級的時候,用於告訴客戶端服務大概多久會恢復。
  • Server:伺服器應用程式名稱和版本號。
  • Title:對HTML文件來說,就是HTML文件的源端給出的標題。
  • Warning:對報文當前狀態可能存在問題進行說明,ps:《HTTP權威指南》說它只是一個響應首部,但是MDN說它是一個通用首部。

協商首部

  • Accept-Ranges:告訴客戶端伺服器支援範圍請求,具體值說明的是範圍請求使用的單位。
  • Vary:需要檢視其他首部的列表,會影響之後的響應,之後的請求只有vary列出來的所有首部的值完全相同時才會使用快取(MDN的例子似乎表明請求首部和響應首部對應),否則不會當作是同一個請求。

安全響應首部

  • Proxy-Authenticate:代理對客戶端的質詢,表示獲取代理上資源需要採用的身份驗證方式。
  • Set-Cookie:伺服器向客戶端設定cookie,通常情況下使用該首部來設定會話ID傳送給客戶端。
  • Set-Cookie2:與Set-Cookie首部的作用一樣,但是目前已經被廢棄。
  • www-Authenticate:伺服器客戶端的質詢,表示獲取伺服器上的資源需要採用的身份驗證方式。

實體首部

​ 實體首部可以細分為以下幾類:

1. 實體資訊性首部。
2. 內容首部。
3. 實體快取首部。
複製程式碼

實體資訊性首部

  • Allow:列出了可以對此資源執行的請求方法列表。
  • Location:用於告訴客戶端,資源的實際位於何處(URL)。

內容首部

  • Content-Base:解析主體中的相對URL時使用的基礎URL。
  • Content-Encoding:對主體執行的編碼方式。
  • Content-Language:解析主體時最適應使用的語言。
  • Content-Length:主體長度或者尺寸。
  • Content-Location:資源實際所在的位置。
  • Content-MD5:主體的md5校驗和。
  • Content-Range:在整個資源中此實體表示的位元組範圍。
  • Content-Type:該主體的物件型別(MIME型別)。

實體快取首部

  • Etag:實體特定版本的標誌符,用於快取的強校驗。
  • Expires:該值指定日期時間之後資源失效,需要從新進行對資源進行驗證。
  • Last-Modified:資源最後一次被修改的日期和時間。

參考資料

  • 《HTTP權威指南》
  • MDN