HTTP

秦丨竹發表於2020-10-05

===========================================
http請求報頭 是如何生成的,主要有三種情況:


1.瀏覽器自動生成的請求。絕大部分正常使用者訪問都是這類情況,只要是使用者主動輸入網址訪問時傳送的http請求,那這些頭部欄位都是瀏覽器自動生成的,比如host,cookie,user-agent, Accept-Encoding:等。

2.瀏覽器外掛,javascript指令碼增加或者修改的header。JS能夠控制瀏覽器發起請求,也能在這裡增加一些header,但是考慮到安全和效能的原因,對JS控制 header的能力做了一些限制,比如host和cookie, user-agent等這些欄位,JS是無法干預的。

3.中間代理。如果使用者請求要經過一些中間代理(比如運營商或者公司閘道器),中間代理能夠檢視和修改使用者的全部資料,任何頭部欄位。除非我們使用了HTTPS。
============================================


HTTP訊息報頭包括普通報頭、請求報頭、響應報頭、實體報頭這四大類。
 
每一個 報頭域 都是由 名字+冒號+空格+值 組成,訊息報頭域的名字不區分大小寫。它們的作用是描述 客戶端或者伺服器 的屬性
 
1.普通報頭:即可用於請求,也可用於響應,是作為一個整體而不是特定資源與事務相關聯。
2.請求報頭:允許客戶端傳遞關於自身資訊和希望的響應形式。
3.響應報頭:允許伺服器傳遞關於自身資訊的響應。
4.實體報頭:定義被傳送資源的資訊。即可用於請求,也可用於響應。
 
1、普通報頭 (General Header)

在普通報頭中,有少數報頭域用於所有的請求和響應訊息,但並不用於被傳輸的實體,只用於傳輸的訊息對請求頭域的擴充套件要求通訊雙方都支援,如果存在不支援的請求頭域,一般將會作為實體頭域處理
Cache-Control
Connection
Date
Pragma
Transfer-Encoding
Upgrade
Via
 
2、請求報頭 (Request Headers)

請求報頭允許客戶端向伺服器端傳遞請求的附加資訊以及客戶端自身的資訊對請求頭域的擴充套件要求通訊雙方都支援,如果存在不支援的請求頭域,一般將會作為實體頭域處理
Accept
Accept-Charset
Accept-Encoding
Accept-Language
Authorization
Host
User-Agent
From
If-Modified-Since
If-Match
If-None-Match
If-Range
If-Unmodified-Since
Max-Forwards
Proxy-Authorization
Range
Referer
 
3、響應報頭 (Response Headers)

響應報頭允許伺服器傳遞不能放在狀態行中的附加響應資訊,以及關於伺服器的資訊和對Request-URI所標識的資源進行下一步訪問的資訊對響應頭域的擴充套件要求通訊雙方都支援,如果存在不支援的響應頭域,一般將會作為實體頭域處理
 

Location
Server
WWW-Authenticate
Age
Proxy-Authenticate
Public
Retry-After
Vary
Warning
 
4、實體報頭 (Entity Header)

請求和響應訊息都可以傳送一個實體。一個實體由實體報頭域和實體正文組成,但並不是說實體報頭域和實體正文要在一起傳送,可以只傳送實體報頭域。實體報頭定義了關於實體正文(eg:有無實體正文)和請求所標識的資源的元資訊
Content-Encoding
Content-Language
Content-Length
Content-Type
Last-Modified
Expires
Allow
Content-Base
Content-Location
Content-MD5
Content-Range
Etag
extension-header
 
Accept
客戶端可以處理的媒體型別,按優先順序排序,在一個以逗號為分隔的列表中,可以定義多種型別和使用萬用字元。

Accept: image/jpeg,image/png,*/*
 
Accept-Language
客戶端接受的語言列表。
 

Accept-Language: zh-cn,zh;q=0.5
 
Accept-Ranges
一個響應頭標,它允許伺服器指明:將在給定的偏移和長度處,為資源組成部分的接受請求。
 該頭標的值被理解為請求範圍的度量單位。
 

Accept-Ranges: bytes
     Accept-Ranges: none
 
Accept-Encoding
客戶端編碼。
 

Accept-Encoding: gzip,deflate
 
Accept-Charset
客戶端可以處理的字符集,按優先順序排序,在一個以逗號為分隔的列表中,可以定義多種型別和使用萬用字元。
 

Accept-Charset: iso-8859-1,*,utf-8
 
Age
允許伺服器規定自伺服器生成該響應以來所經過的時間長度,以秒為單位。
 該頭標主要用於快取響應。
 

Age: 30
 
Allow
一個響應頭標,它定義一個由位於請求URI中的次源所支援的HTTP方法列表。
 

Allow: GET,PUT
 
Authorization
一個響應頭標,用於定義訪問一種資源所必需的授權(域和被編碼的使用者ID與口令)。
 

Authorization: Basic YXV0aG9yOnBoaWw=
 
Cache-Control
快取機制。
 在請求訊息或響應訊息中設定 Cache-Control並不會修改另一個訊息處理過程中的快取處理過程。
 請求時的快取指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,
 響應訊息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。
 

Cache-Control: max-age=3600
 
各個訊息中的指令含義如下:
Public
指示響應可被任何快取區快取。
Private
指示對於單個使用者的整個或部分響應訊息,不能被共享快取處理。
 這允許伺服器僅僅描述當使用者的部分響應訊息,此響應訊息對於其他使用者的請求無效。
no-cache
指示請求或響應訊息不能快取
no-store
用於防止重要的資訊被無意的釋出。在請求訊息中傳送將使得請求和響應訊息都不使用快取。
max-age
指示客戶機可以接收生存期不大於指定時間(以秒為單位)的響應。
min-fresh
指示客戶機可以接收響應時間小於當前時間加上指定時間的響應。
max-stale
指示客戶機可以接收超出超時期間的響應訊息。
 如果指定max-stale訊息的值,那麼客戶機可以接收超出超時期指定值之內的響應訊息。
 
Content-Length
表示實際傳送的位元組數
 只有當瀏覽器使用持久HTTP連線時才需要這個資料
 
Content-Encoding
文件的編碼(Encode)方法。只有在解碼之後才可以得到Content-Type頭指定的內容型別。
 利用gzip壓縮文件能夠顯著地減少HTML文件的下載時間
 
Connection
是否儲存socket連線為開放。
 

Connection: close
     Connection: keep-alive
 
Cookie
網站cookie
 

Cookie: PHPSESSID=d2f86046854e13ca02d9eef6c2dcb826
 
Content-Type
用於向接收方指示實體的介質型別(就是伺服器返回給客戶端的資源是什麼型別的)
 

Content-Type: text/html
 
Content-Base
一種定義基本URI的實體頭標,為了在實體範圍內解析相對URLs。
 如果沒有定義Content-Base頭標解析相對URLs,使用Content-Location URI(存在且絕對)或使用URI請求。
 

Content-Base: Http://www.myweb.com
 
Content-Location
指定包含於請求或響應中的資源定位(URI)。
 對URL也作為被解析實體的相對URL的出發點。
 

Content-Location: http://www.myweb.com/news
 
Content-MD5
實體的一種MD5摘要,用作校驗和。
 傳送方和接受方都計算MD5摘要,接受方將其計算的值與此頭標中傳遞的值進行比較。
 
Content-Range
隨部分實體一同傳送;標明被插入位元組的低位與高位位元組偏移,也標明此實體的總長度。
 

Content-Range: 1001-2000/5000
 
Date
Date頭域表示訊息傳送的時間,時間的描述格式由rfc822定義。
Date描述的時間表示世界標準時,換算成本地時間,需要知道使用者所在的時區
 

Date: Fri, 05 Dec 2008 03:17:21 GMT
 
Expires
指定實體的有效期, 過期時間
 

Expires: Mon,05 Dec 2008 12:00:00 GMT
 
ETag
一種實體頭標,它向被髮送的資源分派一個唯一的識別符號。
 對於可以使用多種URL請求的資源,ETag可以用於確定實際被髮送的資源是否為同一資源。
 

ETag: '208f-419e-30f8dc99'
 
Form
一種請求頭標,給定控制使用者代理的人工使用者的電子郵件地址。
 

From: webmaster@myweb.com
 
Host
被請求資源的主機名。對於使用HTTP/1.1的請求而言,此域是強制性的。
 

Host: www.myweb.com
 
If-Modified-Since
記錄頁面最後修改時間,客戶端往伺服器傳送
 

If-Modified-Since: Wed, 03 Dec 2008 03:39:18 GMT
 
If-Unmodified-Since
只有自指定的日期以來,被請求的實體還不曾被修改過,才會返回此實體。
 

If-Unmodified-Since: Mon,10PR 18:42:51 GMT
 
If-Match
如果包含於一個請求,指定一個或者多個實體標記。只傳送其ETag與列表中標記區配的資源。
 

If-Match: '208f-419e-308dc99'
 
If-None-Match
資源的ETag不與列表中的任何一個條件匹配,操作才執行。
 

If-None-Match: "502d78280-2cc2-45d1c30522580"
 
If-Range
指定資源的一個實體標記,客戶端已經擁有此資源的一個拷貝。必須與Range頭標一同使用。
 如果此實體自上次被客戶端檢索以來,還不曾修改過,那麼伺服器只傳送指定的範圍,否則它將傳送整個資源。
 

Range: byte=0-499
     If-Range: '208f-419e-30f8dc99'
 
Keep-Alive
持續連線,出現後繼請求時,避免建立或者重新建立連線。
 

Keep-Alive: 300
 
Last-Modified
指定被請求資源上次被修改的日期和時間。
 

Last-Modified: Mon,10PR 18:42:51 GMT
 
Location
對於一個已經移動的資源,用於重定向請求者至另一個位置。
 與狀態編碼302(暫時移動)或者301(永久性移動)配合使用。
 

Location: http://www2.myweb.com/index.jsp
 
Max-Forwards
一個用於TRACE方法的請求頭標,以指定代理或閘道器的最大數目,該請求通過閘道器才得以路由。
 在通過請求傳遞之前,代理或閘道器應該減少此數目。
 

Max-Forwards: 3
 
Pragma
用來包含實現特定的指令,最常用的是Pragma:no-cache。
 在HTTP/1.1協議中,它的含義和Cache-Control:no-cache相同
 
Proxy-Authenticate
類似於WWW-Authenticate,便是有意請求只來自請求鏈(代理)的下一個伺服器的認證。
 

Proxy-Authenticate: Basic realm-admin
 
Proxy-Proxy-Authorization
類似於授權,但並非有意傳遞任何比在即時伺服器鏈中更進一步的內容。
 

Proxy-Proxy-Authorization: Basic YXV0aG9yOnBoaWw=
 
Public
列表顯示伺服器所支援的方法集。
 

Public: OPTIONS,MGET,MHEAD,GET,HEAD
 
Range
指定一種度量單位和一個部分被請求資源的偏移範圍。
 

Range: bytes=206-5513
 
Refener
一種請求頭標域,標明產生請求的初始資源。對於HTML表單,它包含此表單的Web頁面的地址。
 

Refener: http://www.myweb.com/news/search.html
 
Retry-After
一種響應頭標域,由伺服器與狀態編碼503(無法提供服務)配合傳送,以標明再次請求之前應該等待多長時間。
 此時間即可以是一種日期,也可以是一種秒單位。
 

Retry-After: 18
 
Server
伺服器名字
 

Server: Apache/2.2.9 (Win32) PHP/5.2.6
 
Transfer-Encoding
一種通用頭標,標明對應被接受方反向的訊息體實施變換的型別
 當不能預先確定報文體的長度時,不可能在頭中包含Content-Length域來指明報文體長度,
 此時就需要通過Transfer-Encoding域來確定報文體長度。
 通常情況下,Transfer-Encoding域的值應當為chunked,表明採用chunked編碼方式來進行報文體的傳輸。
chunked編碼是HTTP/1.1 RFC裡定義的一種編碼方式,因此所有的HTTP/1.1應用都應當支援此方式。
chunked編碼的基本方法是將大塊資料分解成多塊小資料,每塊都可以自指定長度
 

Transfer-Encoding: chunked
 
User-Agent
使用者瀏覽器資訊,定義用於產生請求的軟體型別(典型的如Web瀏覽器)
 

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
 
Upgrade
允許伺服器指定一種新的協議或者新的協議版本,與響應編碼101(切換協議)配合使用。
 

Upgrade: HTTP/2.0
 
Vary
用於表示使用伺服器驅動的協商從可用的響應表示中選擇響應實體
 

Vary: Accept-Encoding
 
Via
一個包含所有中間主機和協議的通用頭標,用於滿足請求。
 

Via: 1.0 fred.com, 1.1 wilma.com
 
Warning
用於提供關於響應狀態補充資訊的響應頭標。
 

Warning: 99 www.myweb.com Piano needs tuning
 
www-Authenticate
一個提示使用者代理提供使用者名稱和口令的響應頭標,與狀態編碼401(未授權)配合使用。響應一個授權頭標。
 

www-Authenticate: Basic realm=zxm.mgmt
 
X-Cache
表示 http request 是由 proxy server 回的
MISS 表示 proxy 代理
HIT 表示 proxy 直接回應

相關文章