做爲一個程序猿,瞭解經常使用的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:傳輸緩存指令,用於實現緩存機制,大體上能夠分爲緩存請求指令和緩存響應指令兩大類:服務器
-
Pragma:HTTP1.0規範中的首部,具體表現取決於實現,所以可能具備不同的效果;除非是在只支持HTTP1.0版本的應用程序中才使用該首部,不然其餘狀況下都應該優先考慮Cache-Control首部;理論上該首部的效果和Cache-Control: no-cache的效果同樣,可是由於具體表現得參考實現。spa
請求首部
請求首部還能夠分爲如下幾類:操作系統
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:資源最後一次被修改的日期和時間。
參考資料