關於常用的http請求頭以及響應頭詳解

晴天~ ☀發表於2018-12-21

一、常用的http請求頭

1.Accept

  • Accept: text/html  瀏覽器可以接受伺服器回發的型別為 text/html。
  • Accept: */*   代表瀏覽器可以處理所有型別,(一般瀏覽器發給伺服器都是發這個)。

2.Accept-Encoding

  • Accept-Encoding: gzip, deflate 瀏覽器申明自己接收的編碼方法,通常指定壓縮方法,是否支援壓縮,支援什麼壓縮方法(gzip,deflate),(注意:這不是隻字元編碼)。

3.Accept-Language

  • Accept-Language:zh-CN,zh;q=0.9  瀏覽器申明自己接收的語言。

4.Connection

  • Connection: keep-alive  當一個網頁開啟完成後,客戶端和伺服器之間用於傳輸HTTP資料的TCP連線不會關閉,如果客戶端再次訪問這個伺服器上的網頁,會繼續使用這一條已經建立的連線。
  •  Connection: close 代表一個Request完成後,客戶端和伺服器之間用於傳輸HTTP資料的TCP連線會關閉, 當客戶端再次傳送Request,需要重新建立TCP連線。

5.Host(傳送請求時,該報頭域是必需的)

  • Host:www.baidu.com 請求報頭域主要用於指定被請求資源的Internet主機和埠號,它通常從HTTP URL中提取出來的。

6.Referer

  • Referer:https://www.baidu.com/?tn=62095104_8_oem_dg 當瀏覽器向web伺服器傳送請求的時候,一般會帶上Referer,告訴伺服器我是從哪個頁面連結過來的,伺服器籍此可以獲得一些資訊用於處理。

7.User-Agent

  • User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36 告訴HTTP伺服器, 客戶端使用的作業系統和瀏覽器的名稱和版本。

8.Cache-Control

  • Cache-Control:private 預設為private  響應只能夠作為私有的快取,不能再使用者間共享
  • Cache-Control:public 響應會被快取,並且在多使用者間共享。正常情況, 如果要求HTTP認證,響應會自動設定為 private.
  • Cache-Control:must-revalidate  響應在特定條件下會被重用,以滿足接下來的請求,但是它必須到伺服器端去驗證它是不是仍然是最新的。
  • Cache-Control:no-cache  響應不會被快取,而是實時向伺服器端請求資源。
  • Cache-Control:max-age=10 設定快取最大的有效時間,但是這個引數定義的是時間大小(比如:60)而不是確定的時間點。單位是[秒 seconds]。
  • Cache-Control:no-store 在任何條件下,響應都不會被快取,並且不會被寫入到客戶端的磁碟裡,這也是基於安全考慮的某些敏感的響應才會使用這個。

9.Cookie

Cookie是用來儲存一些使用者資訊以便讓伺服器辨別使用者身份的(大多數需要登入的網站上面會比較常見),比如cookie會儲存一些使用者的使用者名稱和密碼,當使用者登入後就會在客戶端產生一個cookie來儲存相關資訊,這樣瀏覽器通過讀取cookie的資訊去伺服器上驗證並通過後會判定你是合法使用者,從而允許檢視相應網頁。當然cookie裡面的資料不僅僅是上述範圍,還有很多資訊可以儲存是cookie裡面,比如sessionid等。

10.Range(用於斷點續傳)

  • Range:bytes=0-5 指定第一個位元組的位置和最後一個位元組的位置。用於告訴伺服器自己想取物件的哪部分。

二、常用的http響應頭

1.Cache-Control(對應請求中的Cache-Control)

  • Cache-Control:private 預設為private 響應只能夠作為私有的快取,不能再使用者間共享
  • Cache-Control:public 瀏覽器和快取伺服器都可以快取頁面資訊。
  • Cache-Control:must-revalidate 對於客戶機的每次請求,代理伺服器必須想伺服器驗證快取是否過時。
  • Cache-Control:no-cache 瀏覽器和快取伺服器都不應該快取頁面資訊。
  • Cache-Control:max-age=10  是通知瀏覽器10秒之內不要煩我,自己從緩衝區中重新整理。
  • Cache-Control:no-store 請求和響應的資訊都不應該被儲存在對方的磁碟系統中。

2.Content-Type

  • Content-Type:text/html;charset=UTF-8 告訴客戶端,資原始檔的型別,還有字元編碼,客戶端通過utf-8對資源進行解碼,然後對資源進行html解析。通常我們會看到有些網站是亂碼的,往往就是伺服器端沒有返回正確的編碼。

3.Content-Encoding

  • Content-Encoding:gzip 告訴客戶端,服務端傳送的資源是採用gzip編碼的,客戶端看到這個資訊後,應該採用gzip對資源進行解碼。

4.Date

  • Date: Tue, 03 Apr 2018 03:52:28 GMT 這個是服務端傳送資源時的伺服器時間,GMT是格林尼治所在地的標準時間。http協議中傳送的時間都是GMT的,這主要是解決在網際網路上,不同時區在相互請求資源的時候,時間混亂問題。

5.Server

  • Server:Tengine/1.4.6  這個是伺服器和相對應的版本,只是告訴客戶端伺服器資訊

6.Transfer-Encoding

  • Transfer-Encoding:chunked 這個響應頭告訴客戶端,伺服器傳送的資源的方式是分塊傳送的。一般分塊傳送的資源都是伺服器動態生成的,在傳送時還不知道傳送資源的大小,所以採用分塊傳送,每一塊都是獨立的,獨立的塊都能標示自己的長度,最後一塊是0長度的,當客戶端讀到這個0長度的塊時,就可以確定資源已經傳輸完了。

7.Expires

  • Expires:Sun, 1 Jan 2000 01:00:00 GMT 這個響應頭也是跟快取有關的,告訴客戶端在這個時間前,可以直接訪問快取副本,很顯然這個值會存在問題,因為客戶端和伺服器的時間不一定會都是相同的,如果時間不同就會導致問題。所以這個響應頭是沒有Cache-Control:max-age=*這個響應頭準確的,因為max-age=date中的date是個相對時間,不僅更好理解,也更準確。

8.Last-Modified

  • Last-Modified: Dec, 26 Dec 2015 17:30:00 GMT 所請求的物件的最後修改日期(按照 RFC 7231 中定義的“超文字傳輸協議日期”格式來表示)

9.Connection

  • Connection:keep-alive 這個欄位作為回應客戶端的Connection:keep-alive,告訴客戶端伺服器的tcp連線也是一個長連線,客戶端可以繼續使用這個tcp連線傳送http請求。

10.Etag

  • ETag: "737060cd8c284d8af7ad3082f209582d" 就是一個物件(比如URL)的標誌值,就一個物件而言,比如一個html檔案,如果被修改了,其Etag也會別修改,所以,ETag的作用跟Last-Modified的作用差不多,主要供WEB伺服器判斷一個物件是否改變了。比如前一次請求某個html檔案時,獲得了其 ETag,當這次又請求這個檔案時,瀏覽器就會把先前獲得ETag值傳送給WEB伺服器,然後WEB伺服器會把這個ETag跟該檔案的當前ETag進行對比,然後就知道這個檔案有沒有改變了。

11.Refresh

  • Refresh: 5; url=http://baidu.com  用於重定向,或者當一個新的資源被建立時。預設會在5秒後重新整理重定向。

12.Access-Control-Allow-Origin 

  • Access-Control-Allow-Origin: *   *號代表所有網站可以跨域資源共享,如果當前欄位為*那麼Access-Control-Allow-Credentials就不能為true
  • Access-Control-Allow-Origin: www.baidu.com 指定哪些網站可以跨域資源共享

13.Access-Control-Allow-Methods

  • Access-Control-Allow-Methods:GET,POST,PUT,DELETE  允許哪些方法來訪問

14.Access-Control-Allow-Credentials

  • Access-Control-Allow-Credentials: true  是否允許傳送cookie。預設情況下,Cookie不包括在CORS請求之中。設為true,即表示伺服器明確許可,Cookie可以包含在請求中,一起發給伺服器。這個值也只能設為true,如果伺服器不要瀏覽器傳送Cookie,刪除該欄位即可。如果access-control-allow-origin為*,當前欄位就不能為true

15.Content-Range

  • Content-Range: bytes 0-5/7877 指定整個實體中的一部分的插入位置,他也指示了整個實體的長度。在伺服器向客戶返回一個部分響應,它必須描述響應覆蓋的範圍和整個實體長度。


相關文章