HTTP 首部欄位詳細介紹

来源:http://www.cnblogs.com/jycboy/archive/2017/02/17/http_head.html
-Advertisement-
Play Games

HTTP 協議的請求和響應報文中必定包含 HTTP 首部,只是我們平時在使用 Web 的過程中感受不到它。本章 我們一起來學習 HTTP 首部的結構,以及首部中各欄位的用法。 6.1 HTTP 報文首部 首部內容為客戶端和伺服器分別處理請求和響應提供 所需要的信息。對於客戶端用戶來說,這些信息中的大 ...


本文是HTTP解析系列第二篇,如果對http協議不是很瞭解,可以選去看第一篇:帶新手走進神秘的HTTP協議,本文主要是對Http的首部欄位進行詳細解析。

HTTP 協議的請求和響應報文中必定包含 HTTP 首部,只是我們平時在使用 Web 的過程中感受不到它。本章 我們一起來學習 HTTP 首部的結構,以及首部中各欄位的用法。

6.1 HTTP 報文首部

首部內容為客戶端和伺服器分別處理請求和響應提供 所需要的信息。對於客戶端用戶來說,這些信息中的大部分內容都無須親自查看。

HTTP 請求報文

在請求中,HTTP 報文由方法、URI、HTTP 版本、HTTP 首部欄位等部分構成。

下麵的示例是訪問 http://hackr.jp 時,請求報文的首部信息。

GET / HTTP/1.1 
Host: hackr.jp 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*; q=0.8 
Accept-Language: ja,en-us;q=0.7,en;q=0.3 
Accept-Encoding: gzip, deflate DNT: 1 
Connection: keep-alive 
If-Modified-Since: Fri, 31 Aug 2007 02:02:20 GMT 
If-None-Match: "45bae1-16a-46d776ac" 
Cache-Control: max-age=0

HTTP 響應報文
在響應中,HTTP 報文由 HTTP 版本、狀態碼(數字和原因短語)、HTTP 首部欄位 3 部分構成。

圖:響應報文 
以下示例是之前請求訪問 http://hackr.jp/ 時,返回的響應報文的首部信息。

HTTP/1.1 304 Not Modified 
Date: Thu, 07 Jun 2012 07:21:36 GMT 
Server: Apache 
Connection: close 
Etag: "45bae1-16a-46d776ac" 

在報文眾多的欄位當中,HTTP 首部欄位包含的信息最為豐富。首部欄位同時存在於請求和響應報文內,並涵蓋 HTTP 報文相關的內容信息。
因 HTTP 版本或擴展規範的變化,首部欄位可支持的欄位內容略有不同。本書主要涉及 HTTP/1.1 及常用的 首部欄位。

6.2 HTTP 首部欄位

使用首部欄位是為了給瀏覽器和伺服器提供報文主體大小、所使用的語言、認證信息等內容。

6.2.1 HTTP 首部欄位結構

HTTP 首部欄位是由首部欄位名和欄位值構成的,中間用冒號“:” 分隔。

  首部欄位名: 欄位值

例如,在 HTTP 首部中以 Content-Type 這個欄位來表示報文主體的對象類型。

Content-Type: text/html

就以上述示例來看,首部欄位名為 Content-Type,字元串 text/html 是欄位值。
另外,欄位值對應單個 HTTP 首部欄位可以有多個值,如下所示。

Keep-Alive: timeout=15, max=100

註意:若 HTTP 首部欄位重覆了會如何?
當 HTTP 報文首部中出現了兩個或兩個以上具有相同首部欄位名時會怎麼樣?這種情況在規範內尚未明確,根據瀏覽器內部處理邏輯的不同,結果可能並不一致。有些瀏覽器會優先處理第一次出現的首部欄位,而有些則會優先處理最後出現的首部欄位。

6.2.2   4 種 HTTP 首部欄位類型

HTTP 首部欄位根據實際用途被分為以下 4 種類型:
通用首部欄位(General Header Fields)
請求報文和響應報文兩方都會使用的首部。
請求首部欄位(Request Header Fields)
從客戶端向伺服器端發送請求報文時使用的首部。補充了請求的附加內容、客戶端信息、響應內容相關優先順序等信息。
響應首部欄位(Response Header Fields)
從伺服器端向客戶端返迴響應報文時使用的首部。補充了響應的附加內容,也會要求客戶端附加額外的內容信息。
實體首部欄位(Entity Header Fields)
針對請求報文和響應報文的實體部分使用的首部。補充了資源內容更新時間等與實體有關的信息。

6.2.3 HTTP/1.1 首部欄位一覽

HTTP/1.1 規範定義瞭如下 47 種首部欄位。
表 6-1:通用首部欄位

表 6-2:請求首部欄位

首部欄位名                  說明
Accept                         用戶代理可處理的媒體類型
Accept-Charset            優先的字元集
Accept-Encoding         優先的內容編碼
Accept-Language        優先的語言(自然語言)
Authorization               Web認證信息
Expect                          期待伺服器的特定行為
From                             用戶的電子郵箱地址
Host                              請求資源所在伺服器
If-Match                        比較實體標記(ETag)
If-Modified-Since          比較資源的更新時間
If-None-Match              比較實體標記(與 If-Match 相反)
If-Range                        資源未更新時發送實體 Byte 的範圍請求
If-Unmodified-Since     比較資源的更新時間(與If-Modified-Since相反)
Max-Forwards               最大傳輸逐跳數
Proxy-Authorization     代理伺服器要求客戶端的認證信息
Range                           實體的位元組範圍請求
Referer                          對請求中 URI 的原始獲取方
TE                                  傳輸編碼的優先順序
User-Agent                   HTTP 客戶端程式的信息

表 6-3:響應首部欄位 

首部欄位名                     說明
Accept-Ranges             是否接受位元組範圍請求
Age                               推算資源創建經過時間
ETag                              資源的匹配信息
Location                        令客戶端重定向至指定URI
Proxy-Authenticate      代理伺服器對客戶端的認證信息
Retry-After                   對再次發起請求的時機要求
Server HTTP                  伺服器的安裝信息
Vary                              代理伺服器緩存的管理信息
WWW-Authenticate     伺服器對客戶端的認證信息

表 6-4:實體首部欄位

首部欄位名                    說明
Allow                            資源可支持的HTTP方法
Content-Encoding       實體主體適用的編碼方式
Content-Language      實體主體的自然語言
Content-Length           實體主體的大小(單位:位元組)
Content-Location        替代對應資源的URI
Content-MD5              實體主體的報文摘要
Content-Range            實體主體的位置範圍
Content-Type              實體主體的媒體類型
Expires                         實體主體過期的日期時間
Last-Modified              資源的最後修改日期時間

6.2.4  非 HTTP/1.1 首部欄位

在 HTTP 協議通信交互中使用到的首部欄位,不限於 RFC2616 中定義的 47 種首部欄位。還有 Cookie、 Set-Cookie 和 Content-Disposition 等在其他 RFC 中定義的首部欄位,它們的使用頻率也很高。
這些非正式的首部欄位統一歸納在 RFC4229 HTTP Header Field Registrations 中。

6.2.6 End-to-end 首部和Hop-by-hop 首部

HTTP 首部欄位將定義成緩存代理和非緩存代理的行為,分成 2 種類型。
端到端首部(End-to-end Header)

分在此類別中的首部會轉發給請求 / 響應對應的最終接收目標,且必須保存在由緩存生成的響應中,另外規 定它必須被轉發。

逐跳首部(Hop-by-hop Header)

分在此類別中的首部只對單次轉發有效,會因通過緩存或代理而不再轉發。HTTP/1.1 和之後版本中,如果要使用 hop-by-hop 首部,需提供 Connection 首部欄位。

下麵列舉了 HTTP/1.1 中的逐跳首部欄位。除這 8 個首部欄位之外,其他所有欄位都屬於端到端首部。

  • Connection
  • Keep-Alive
  • Proxy-Authenticate
  • Proxy-Authorization
  • Trailer
  • TE
  • Transfer-Encoding
  • Upgrade

6.3 HTTP/1.1 通用首部欄位

通用首部欄位是指,請求報文和響應報文雙方都會使用的首部。

6.3.1  Cache-Control

通過指定首部欄位 Cache-Control 的指令,就能操作緩存的工作機制。

圖:首部欄位Cache-Control 能能夠控制緩存的行為 

指令的參數是可選的,多個指令之間通過“,”分隔。首部欄位 Cache-Control 的指令可用於請求及響應時。

Cache-Control: private, max-age=0, no-cache​

Cache-Control 指令一覽:

可用的指令按請求和響應分類如下所示。
表 6-5:緩存請求指令
指令                                  參數         說明
no-cache                          無            強制向源伺服器再次驗證
no-store 無 不緩存請求或響應的任何內容
max-age = [ 秒] 必需 響應的最大Age值
max-stale( = [ 秒])
可省 略
接收已過期的響應
min-fresh = [ 秒] 必需 期望在指定時間內的響應仍有效
no-transform 無 代理不可更改媒體類型
only-if-cached 無 從緩存獲取資源
cache-extension - 新指令標記(token)

表 6-6:緩存響應指令

指令                                 參數           說明
public                              無              可向任意方提供響應的緩存
private                            可省略        僅向特定用戶返迴響應
no-cache                        可省略        緩存前必須先確認其有效性
no-store                         無              不緩存請求或響應的任何內容
no-transform                 無               代理不可更改媒體類型
must-revalidate             無              可緩存但必須再向源伺服器進行確認
proxy-revalidate            無              要求中間緩存伺服器對緩存的響應有效性再進行 確認
max-age = [ 秒]            必需            響應的最大Age值
s-maxage = [ 秒]          必需             公共緩存伺服器響應的最大Age值
cache-extension           -                 新指令標記(token)

剩下的內容是對上面欄位的解析,在 ppt 87頁,實在太多了,需要時去看。

6.3.2  Connection

Connection 首部欄位具備如下兩個作用。

  • 控制不再轉發給代理的首部欄位 
  • 管理持久連接

  1. 控制不再轉發給代理的首部欄位

Connection: 不再轉發的首部欄位名

在客戶端發送請求和伺服器返迴響應內,使用 Connection 首部欄位,可控制不再轉發給代理的首部欄位(即 Hop-by-hop 首部)。

  2. 管理持久連接 

 

Connection: close

HTTP/1.1 版本的預設連接都是持久連接。為此,客戶端會在持久連接上連續發送請求。當伺服器端想明確斷開連接時,則指定 Connection 首部欄位的值為 Close。

Connection: Keep-Alive 

HTTP/1.1 之前的 HTTP 版本的預設連接都是非持久連接。為此,如果想在舊版本的 HTTP 協議上維持 持續連接,則需要指定 Connection 首部欄位的值為 Keep-Alive
如上圖①所示,客戶端發送請求給伺服器時,伺服器端會像上圖②那樣加上首部欄位 Keep-Alive 及首部欄位 Connection 後返迴響應。

太多了,下邊的內容只記重要的部分,做了省略。ppt 93頁

6.3.3 Date 首部欄位

Date 表明創建 HTTP 報文的日期和時間

6.3.4  Pragma

Pragma 是 HTTP/1.1 之前版本的歷史遺留欄位,僅作為與 HTTP/1.0 的向後相容而定義。
規範定義的形式唯一,如下所示。

Pragma: no-cache​

該首部欄位屬於通用首部欄位,但只用在客戶端發送的請求中。客戶端會要求所有的中間伺服器不返回緩存 的資源。

所有的中間伺服器如果都能以 HTTP/1.1 為基準,那直接採用 Cache-Control: no-cache 指定緩存的處理方式 是最為理想的。但要整體掌握全部中間伺服器使用的 HTTP 協議版本卻是不現實的。因此,發送的請求會同 時含有下麵兩個首部欄位。

Cache-Control: no-cache 
Pragma: no-cache​

6.3.5 Trailer

 

首部欄位 Trailer 會事先說明在報文主體後記錄了哪些首部欄位。該首部欄位可應用在 HTTP/1.1 版本分塊傳 輸編碼時。

HTTP/1.1 200 OK 
Date: Tue, 03 Jul 2012 04:40:56 GMT 
Content-Type: text/html 
... 
Transfer-Encoding: chunked 
Trailer: Expires
...(報文主體)... 
0 
Expires: Tue, 28 Sep 2004 23:59:59 GMT

以上用例中,指定首部欄位 Trailer 的值為 Expires,在報文主體之後(分塊長度 0 之後)出現了首部欄位 Expires。

6.3.6 Transfer-Encoding

首部欄位 Transfer-Encoding 規定了傳輸報文主體時採用的編碼方式。

HTTP/1.1 200 OK 
Date: Tue, 03 Jul 2012 04:40:56 GMT 
Cache-Control: public, max-age=604800 
Content-Type: text/javascript; charset=utf-8 
Expires: Tue, 10 Jul 2012 04:40:56 GMT 
X-Frame-Options: DENY 
X-XSS-Protection: 1; mode=block 
Content-Encoding: gzip 
Transfer-Encoding: chunked 
Connection: keep-alive

cf0    ←16進位(10進位為3312)

...3312位元組分塊數據...

392    ←16進位(10進位為914)

...914位元組分塊數據...

0

以上用例中,正如在首部欄位 Transfer-Encoding 中指定的那樣,有效使用分塊傳輸編碼,且分別被分成 3312 位元組和 914 位元組大小的分塊數據。

6.3.7 Upgrade

首部欄位 Upgrade 用於檢測 HTTP 協議及其他協議是否可使用更高的版本進行通信,其參數值可以用來指定 一個完全不同的通信協議。

6.3.8 Via

使用首部欄位 Via 是為了追蹤客戶端與伺服器之間的請求和響應報文的傳輸路徑。

6.3.9 Warning

HTTP/1.1 的 Warning 首部是從 HTTP/1.0 的響應首部(Retry-After)演變過來的。該首部通常會告知用戶一 些與緩存相關的問題的警告。

Warning: 113 gw.hackr.jp:8080 "Heuristic expiration" Tue, 03 Jul 2012 05:09:44 GMT

Warning 首部的格式如下。最後的日期時間部分可省略。

Warning: [警告碼][警告的主機:埠號]“[警告內容]”([日期時間])​

ppt 95頁左右

6.4  請求首部欄位

請求首部欄位是從客戶端往伺服器端發送請求報文中所使用的欄位,用於補充請求的附加信息、客戶端信 息、對響應內容相關的優先順序等內容。

6.4.1  Accept

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8​

Accept 首部欄位可通知伺服器,用戶代理能夠處理的媒體類型及媒體類型的相對優先順序。可使用 type/subtype 這種形式,一次指定多種媒體類型。
下麵我們試舉幾個媒體類型的例子。

文本文件

text/html, text/plain, text/css ...
application/xhtml+xml, application/xml ...​

圖片文件

image/jpeg, image/gif, image/png ...​

視頻文件

video/mpeg, video/quicktime ...​

應用程式使用的二進位文件

application/octet-stream, application/zip ...​

比如,如果瀏覽器不支持 PNG 圖片的顯示,那 Accept 就不指定 image/png,而指定可處理的 image/gif 和 image/jpeg 等圖片類型。 若想要給顯示的媒體類型增加優先順序,則使用 q= 來額外表示權重值 1,用分號(;)進行分隔。權重值 q 的 範圍是 0~1(可精確到小數點後 3 位),且 1 為最大值。不指定權重 q 值時,預設權重為 q=1.0。
1 原文是“品質係數”。在 RFC2616 定義中,此處的 q 是指 qvalue,即 quality factor。直譯的話就是質量數,但經過綜合考慮理 解記憶的便利性後,似乎採用權重值更為穩妥。——譯者註
當伺服器提供多種內容時,將會首先返回權重值最高的媒體類型。

6.4.2  Accept-Charset

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

Accept-Charset 首部欄位可用來通知伺服器用戶代理支持的字元集及字元集的相對優先順序。另外,可一次 性指定多種字元集。與首部欄位 Accept 相同的是可用權重 q 值來表示相對優先順序。
該首部欄位應用於內容協商機制的伺服器驅動協商。

6.4.3 Accept-Encoding

Accept-Encoding: gzip, deflate​

Accept-Encoding 首部欄位用來告知伺服器用戶代理支持的內容編碼及內容編碼的優先順序順序。可一次性指 定多種內容編碼。
下麵試舉出幾個內容編碼的例子。
  gzip
   由文件壓縮程式 gzip(GNU zip)生成的編碼格式(RFC1952),採用 Lempel-Ziv 演算法    (LZ77)及 32 位迴圈冗餘校驗(Cyclic Redundancy Check,通稱 CRC)。
    compress
    由 UNIX 文件壓縮程式 compress 生成的編碼格式,採用 Lempel-Ziv-Welch 演算法(LZW)。
    deflate
    組合使用 zlib 格式(RFC1950)及由 deflate 壓縮演算法(RFC1951)生成的編碼格式。
    identity
    不執行壓縮或不會變化的預設編碼格式
採用權重 q 值來表示相對優先順序,這點與首部欄位 Accept 相同。另外,也可使用星號(*)作為通配符,指 定任意的編碼格式。

6.4.4 Accept-Language

 Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3​

首部欄位 Accept-Language 用來告知伺服器用戶代理能夠處理的自然語言集(指中文或英文等),以及自然 語言集的相對優先順序。可一次指定多種自然語言集。
和 Accept 首部欄位一樣,按權重值 q 來表示相對優先順序。在上述圖例中,客戶端在伺服器有中文版資源的情 況下,會請求其返回中文版對應的響應,沒有中文版時,則請求返回英文版響應。

6.4.5 Authorization

Authorization: Basic dWVub3NlbjpwYXNzd29yZA==​

首部欄位 Authorization 是用來告知伺服器,用戶代理的認證信息(證書值)。通常,想要通過伺服器認證的 用戶代理會在接收到返回的 401 狀態碼響應後,把首部欄位 Authorization 加入請求中。共用緩存在接收到含 有 Authorization 首部欄位的請求時的操作處理會略有差異。
有關 HTTP 訪問認證及 Authorization 首部欄位,稍後的章節還會詳細說明。另外,讀者也可參閱 RFC2616。

6.4.6 Expect

Expect: 100-continue​

客戶端使用首部欄位 Expect 來告知伺服器,期望出現的某種特定行為。因伺服器無法理解客戶端的期望作出 回應而發生錯誤時,會返回狀態碼 417 Expectation Failed。
客戶端可以利用該首部欄位,寫明所期望的擴展。雖然 HTTP/1.1 規範只定義了 100-continue(狀態碼 100 Continue 之意)。
等待狀態碼 100 響應的客戶端在發生請求時,需要指定 Expect:100-continue

6.4.7  From

首部欄位 From 用來告知伺服器使用用戶代理的用戶的電子郵件地址。通常,其使用目的就是為了顯示搜索 引擎等用戶代理的負責人的電子郵件聯繫方式。使用代理時,應儘可能包含 From 首部欄位(但可能會因代 理不同,將電子郵件地址記錄在 User-Agent 首部欄位內)。

6.4.8  Host

Host: www.hackr.jp​

首部欄位 Host 會告知伺服器,請求的資源所處的互聯網主機名和埠號。Host 首部欄位在 HTTP/1.1 規範內是唯一一個必須被包含在請求內的首部欄位。
首部欄位 Host 和以單台伺服器分配多個功能變數名稱的虛擬主機的工作機制有很密切的關聯,這是首部欄位 Host 必須存在的意義。

6.4.9  If-xxx 

形如 If-xxx 這種樣式的請求首部欄位,都可稱為條件請求。伺服器接收到附帶條件的請求後,只有判斷指定條 件為真時,才會執行請求。

每個if的詳細內容去看ppt106頁,實在是太多了

6.4.16  Range

Range: bytes=5001-10000​

對於只需獲取部分資源的範圍請求,包含首部欄位 Range 即可告知伺服器資源的指定範圍。上面的示例表示 請求獲取從第 5001 位元組至第 10000 位元組的資源。

6.4.19 User-Agent

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1

首部欄位 User-Agent 會將創建請求的瀏覽器和用戶代理名稱等信息傳達給伺服器。
由網路爬蟲發起請求時,有可能會在欄位內添加爬蟲作者的電子郵件地址。此外,如果請求經過代理,那麼 中間也很可能被添加上代理伺服器的名稱。

6.5 響應首部欄位

響應首部欄位是由伺服器端向客戶端返迴響應報文中所使用的欄位,用於補充響應的附加信息、伺服器信 息,以及對客戶端的附加要求等信息。

6.5.1  Accept-Ranges

當不能處理範圍請求時,Accept-Ranges: none

Accept-Ranges: bytes​

首部欄位 Accept-Ranges 是用來告知客戶端伺服器是否能處理範圍請求,以指定獲取伺服器端某個部分的資 源。
可指定的欄位值有兩種,可處理範圍請求時指定其為 bytes,反之則指定其為 none。

6.5.2  Age

Age: 600​

首部欄位 Age 能告知客戶端,源伺服器在多久前創建了響應。欄位值的單位為秒。
若創建該響應的伺服器是緩存伺服器,Age 值是指緩存後的響應再次發起認證到認證完成的時間值。代理創 建響應時必須加上首部欄位 Age。

6.6  實體首部欄位

實體首部欄位是包含在請求報文和響應報文中的實體部分所使用的首部,用於補充內容的更新時間等與實體相關的信息。

6.6.1  Allow

Allow: GET, HEAD​

首部欄位 Allow 用於通知客戶端能夠支持 Request-URI 指定資源的所有 HTTP 方法。當伺服器接收到不支持 的 HTTP 方法時,會以狀態碼 405 Method Not Allowed 作為響應返回。與此同時,還會把所有能支持的 HTTP 方法寫入首部欄位 Allow 後返回。

6.6.2  Content-Encoding

Content-Encoding: gzip

首部欄位 Content-Encoding 會告知客戶端伺服器對實體的主體部分選用的內容編碼方式。內容編碼是指在不 丟失實體信息的前提下所進行的壓縮。

主要採用以下 4 種內容編碼的方式。(各方式的說明請參考 6.4.3 節 Accept-Encoding 首部欄位)。
gzip
compress
deflate
identity

6.6.3 Content-Language

Content-Language: zh-CN
首部欄位 Content-Language 會告知客戶端,實體主體使用的自然語言(指中文或英文等語言)。

6.6.4 Content-Length

Content-Length: 15000
首部欄位 Content-Length 表明瞭實體主體部分的大小(單位是位元組)。對實體主體進行內容編碼傳輸時,不 能再使用 Content-Length 首部欄位。由於實體主體大小的計算方法略微複雜,所以在此不再展開。

6.6.5  Content-Location

Content-Location: http://www.hackr.jp/index-ja.html​

首部欄位 Content-Location 給出與報文主體部分相對應的 URI。和首部欄位 Location 不同,ContentLocation 表示的是報文主體返回資源對應的 URI。

比如,對於使用首部欄位 Accept-Language 的伺服器驅動型請求,當返回的頁面內容與實際請求的對象不同 時,首部欄位 Content-Location 內會寫明 URI。(訪問 http://www.hackr.jp/ 返回的對象卻是 http://www.hackr.jp/index-ja.html 等類似情況)

6.6.6 Content-MD5

Content-MD5: OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY==
首部欄位 Content-MD5 是一串由 MD5 演算法生成的值,其目的在於檢查報文主體在傳輸過程中是否保持完 整,以及確認傳輸到達。

6.6.7  Content-Range

Content-Range: bytes 5001-10000/10000
針對範圍請求,返迴響應時使用的首部欄位 Content-Range,能告知客戶端作為響應返回的實體的哪個部分 符合範圍請求。欄位值以位元組為單位,表示當前發送部分及整個實體大小。

6.6.8  Content-Type

Content-Type: text/html; charset=UTF-8
首部欄位 Content-Type 說明瞭實體主體內對象的媒體類型。和首部欄位 Accept 一樣,欄位值用 type/subtype 形式賦值。
參數 charset 使用 iso-8859-1 或 euc-jp 等字元集進行賦值。

6.6.9  Expires

Expires: Wed, 04 Jul 2012 08:26:05 GMT

首部欄位 Expires 會將資源失效的日期告知客戶端。緩存伺服器在接收到含有首部欄位 Expires 的響應後,會以緩存來應答請求,在 Expires 欄位值指定的時間之前,響應的副本會一直被保存。當超過指定的時間後, 緩存伺服器在請求發送過來時,會轉向源伺服器請求資源。

6.6.10  Last-Modified

Last-Modified: Wed, 23 May 2012 09:59:55 GMT
首部欄位 Last-Modified 指明資源最終修改的時間。一般來說,這個值就是 Request-URI 指定資源被修改的 時間。但類似使用 CGI 腳本進行動態數據處理時,該值有可能會變成數據最終修改時的時間。

ppt 121頁

6.7 為 Cookie 服務的首部欄位  

ppt 125頁

管理伺服器與客戶端之間狀態的 Cookie,雖然沒有被編入標準化 HTTP/1.1 的 RFC2616 中,但在 Web 網 站方面得到了廣泛的應用。
Cookie 的工作機制是用戶識別及狀態管理。Web 網站為了管理用戶的狀態會通過 Web 瀏覽器,把一些數據 臨時寫入用戶的電腦內。接著當用戶訪問該Web網站時,可通過通信方式取回之前發放的 Cookie。

下麵的表格內列舉了與 Cookie 有關的首部欄位。

表 6-8:為 Cookie 服務的首部欄位

首部欄位名                 說明                                                 首部類型
Set-Cookie                開始狀態管理所使用的Cookie信息     響應首部欄位
Cookie                      伺服器接收到的Cookie信息                請求首部欄位

6.7.1  Set-Cookie

Set-Cookie: status=enable; expires=Tue, 05 Jul 2011 07:26:31 GMT; path=/; domain=.hackr.jp;​

當伺服器準備開始管理客戶端的狀態時,會事先告知各種信息。
下麵的表格列舉了 Set-Cookie 的欄位值。

表 6-9::Set-Cookie 欄位的屬性
屬性                                說明
NAME=VALUE               賦予 Cookie 的名稱和其值(必需項)
expires=DATE               Cookie的有效期(若不明確指定則預設為瀏覽器關閉前為止)
path=PATH                   將伺服器上的文件目錄作為Cookie的適用對象(若不指定則預設為文檔 所在的文件目錄)
domain=功能變數名稱                作為 Cookie 適用對象的功能變數名稱 (若不指定則預設為創建 Cookie 的服務 器的功能變數名稱)
Secure                           僅在 HTTPS 安全通信時才會發送 Cookie
HttpOnly                       加以限制,使 Cookie 不能被 JavaScript 腳本訪問

expires 屬性

Cookie 的 expires 屬性指定瀏覽器可發送 Cookie 的有效期。
當省略 expires 屬性時,其有效期僅限於維持瀏覽器會話(Session)時間段內。這通常限於瀏覽器應用程式被關閉之前。
另外,一旦 Cookie 從伺服器端發送至客戶端,伺服器端就不存在可以顯式刪除 Cookie 的方法。但可通過覆蓋已過期的 Cookie,實現對客戶端 Cookie 的實質性刪除操作。

6.7.2  Cookie

Cookie: status=enable

首部欄位 Cookie 會告知伺服器,當客戶端想獲得 HTTP 狀態管理支持時,就會在請求中包含從伺服器接收到的 Cookie。接收到多個 Cookie 時,同樣可以以多個 Cookie 形式發送。

6.8 其他首部欄位

HTTP 首部欄位是可以自行擴展的。所以在 Web 伺服器和瀏覽器的應用上,會出現各種非標準的首部欄位。
接下來,我們就一些最為常用的首部欄位進行說明。

  • X-Frame-Options
  • X-XSS-Protection
  • DNT
  • P3P

上面欄位的詳細說明去看ppt128頁

這篇和上一篇帶新手走進神秘的HTTP協議,你基本就對HTTP有個詳細的瞭解了。還剩下一點HTTPS,HTTPS介紹在下篇博文中。

本文內容摘自:圖解HTTP,可以自行去下載它的ppt,在CSDN上有很多,找不到的可以在下邊評論,我發給你,彩色版、黑白版都有。

轉發請註明出處:http://www.cnblogs.com/jycboy/p/http_head.html

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.Chrome自動填充的input背景為黃色: box-shadow 向框添加陰影,預設是在框外面,inset改為向內添加。 box-shadow :H水平偏移量 V垂直偏移量 B模糊尺寸 S陰影尺寸 C陰影顏色 O/I內外影; 看陰影效果,先確定陰影尺寸,再確定偏移距離。 2.input獲得焦點 ...
  • 製作了一份jQuery 3.1 參考手冊.CHM離線版供大家使用 點擊下載 預覽一下 ...
  • ▓▓▓▓▓▓ 大致介紹 我們寫好文件後添加到版本庫,但是這樣還沒有做完,我們還需要將它同步到GitHub的遠程倉庫上,這裡就以我們剛開始的drag項目為例,我們在Git學習之路(2)-安裝GIt和創建版本庫 中將drag項目克隆到了本地文件中,假設進過修改後,我們現在要將修改後的文件同步到遠程倉庫中 ...
  • 一、使用場景 使用場景:項目發佈前 操作步驟: 1.執行gulp,對文件進行壓縮、合併等操作; 2.在1執行完成後,對1中合併的文件如default.css進行多主題色的自動生成,在這裡使用node處理。 問題:手工操作步驟繁瑣 打開cmd->切換執行目錄->執行gulp->關閉cmd(gulp執行 ...
  • 前言: 在哪看到過angular程式員被React程式員鄙視,略顯尷尬,確實Angular挺值得被調侃的,在1.*版本存在的幾個性能問題,性能優化的“潛規則”賊多,以及從1.*到2.*版本的面目全非,不過寬容點來看這個強大的框架,升級到ng2肯定是一件好事情,雖然截至目前ng2還存在或多或少需要完善 ...
  • require 用來載入代碼,而 exports 和 module.exports 則用來導出代碼。但很多新手可能會迷惑於 exports 和 module.exports 的區別,為了更好的理解 exports 和 module.exports 的關係,我們先來鞏固下 js 的基礎。 ...
  • 組件通訊 "Omi框架" 組建間的通訊非常遍歷靈活,因為有許多可選方案進行通訊: 通過在組件上聲明 data 傳遞給子節點 通過在組件上聲明 data 傳遞給子節點 (支持複雜數據類型的映射) 父容器設置 childrenData 自動傳遞給子節點 聲明 group data 傳遞(支持複雜數據類型 ...
  • AngularJS學習筆記(一) AngularJS執行流程 一.啟動階段 瀏覽器解析HTML頁面,讀取到angular.js的<script>標簽後會停止解析後面的DOM節點,開始執行angular.js,與此同時,Angular會設置一個事件監聽器來監聽DOMContentLoaded事件,當A ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...