HTTP學(xué)習(xí)筆記#2

五、與HTTP協(xié)作的web服務(wù)器

  1. HTTP/1.1 規(guī)范允許一臺HTTP服務(wù)器搭建多個(gè)web站點(diǎn),即在相同IP地址下,由于虛擬主機(jī)可以寄存多個(gè)不同主機(jī)名和域名的網(wǎng)站。因此發(fā)送HTTP請求時(shí),必須在Host首部內(nèi)完整指定主機(jī)名或域名的URI
  2. 通信數(shù)據(jù)轉(zhuǎn)發(fā)程序:
  • 代理:一種有轉(zhuǎn)發(fā)功能的應(yīng)用程序,扮演著服務(wù)器與客戶端的“中間人”。
    • 基本行為:不改變請求URI,直接轉(zhuǎn)發(fā)。
    • 轉(zhuǎn)發(fā)時(shí),需要附加Via首部字段以標(biāo)記出經(jīng)過的主機(jī)信息。
    • 代理按兩種基準(zhǔn)分類。一種:是否使用緩存,另一種:是否修改報(bào)文。(緩存代理、透明代理)
    • 緩存代理:代理轉(zhuǎn)發(fā)時(shí),緩存代理會(huì)預(yù)先將資源緩存在代理服務(wù)器上。
    • 透明代理:轉(zhuǎn)發(fā)請求或響應(yīng)式,不對報(bào)文做任何加工的代理。反之,稱為非透明代理。
  • 網(wǎng)關(guān):轉(zhuǎn)發(fā)其他服務(wù)器通信數(shù)據(jù)的服務(wù)器。接收從客戶端發(fā)來的請求時(shí),它就像自己擁有資源的原服務(wù)器一樣對請求進(jìn)行處理
    • 工作機(jī)制與代理相似,區(qū)別在于:網(wǎng)關(guān)能使通信線路上的服務(wù)器提供非HTTP協(xié)議服務(wù)
    • 利用網(wǎng)關(guān)提高通信的安全性,因?yàn)榭梢栽诳蛻舳伺c網(wǎng)關(guān)之間的通信新路上加密以確保連接的安全。
  • 隧道:可按要求建立起一條與其他服務(wù)器的通信線路,屆時(shí)使用SSL等加密手段進(jìn)行通信。
    • 目的是確保客戶端能與服務(wù)器進(jìn)行安全的通信
    • 隧道本身不會(huì)去解析HTTP請求。

六、HTTP首部

  1. 請求報(bào)文首部
  • 請求行(方法、URI、HTTP版本)
  • 請求首部字段
  • 通用首部字段
  • 實(shí)體首部字段
  • 其他
  1. 響應(yīng)報(bào)文首部
  • 狀態(tài)行(HTTP版本、狀態(tài)碼)
  • 響應(yīng)首部字段
  • 通用首部字段
  • 實(shí)體首部字段
  • 其他
  1. 首部字段結(jié)構(gòu)
  • 字段名和字段值構(gòu)成,中間用冒號Content-Type: text/html
  • 字段值對應(yīng)單個(gè)HTTP首部字段可以有多個(gè)值Keep-Alive: timeout=15, max=100
  1. End-to-end 首部和Hop-by-hop 首部
  • 端到端首部(End-to-end Header)
    分在此類別中的首部回轉(zhuǎn)發(fā)給請求/響應(yīng)對應(yīng)的最終接收目標(biāo),且必須保存在由緩存生成的響應(yīng)中,另外規(guī)定它必須轉(zhuǎn)發(fā)。
  • 逐跳首部(Hop-by-hop Header)
    分在此類別的首部支隊(duì)單詞轉(zhuǎn)發(fā)有效,會(huì)因通過緩存活代理而不再轉(zhuǎn)發(fā)。HTTP/1.1和之后版本匯總,如果要使用hop-by-hop首部,需提供Connection首部字段。
  • 除了以下字段都屬于端到端首部:
    • Connection
    • Keep-Alive
    • Proxy-Authenticate
    • Proxy-Authorization
    • Trailer
    • TE
    • Transfer-Encoding
    • Upgrade
  1. HTTP/1.1通用首部字段
    Cache-Control:操作緩存的工作機(jī)制
  • 表示是否緩存的指令
    • public:明確表明其他用戶也可利用緩存。
    • private:緩存服務(wù)器會(huì)對該特定用戶提供資源緩存的服務(wù),而其他用戶發(fā)送過來的請求不會(huì)返回緩存,與public相反。
    • no-cache:為了防止從緩存中返回過期的資源
    • no-store:規(guī)定緩存不能在本地存儲請求或響應(yīng)的任一部分。
      說明:從字面上很容易把no-cache誤解為不緩存,但其實(shí)no-cache代表不緩存過期的資源,緩存會(huì)向源服務(wù)器進(jìn)行有效期確認(rèn)后處理資源。no-store才是真正地不進(jìn)行緩存。
  • 指定緩存期限和認(rèn)證的指令
    • Cache-Control: max-age=604800,如果判定緩存資源的緩存時(shí)間數(shù)值比max-age值小,客戶端就接收緩存的資源。當(dāng)max-age為0時(shí),緩存服務(wù)器通常需要將請求轉(zhuǎn)發(fā)給源服務(wù)器。
    • Cache-Control: s-maxage=604800,與max-age相同,不同點(diǎn)時(shí)s-maxage只適用于多位用戶使用的公共緩存服務(wù)器(代理)。當(dāng)使用s-maxage指令后,會(huì)忽略Expires首部字段以及max-age指令處理。
    • Cache-Control: min-fresh=60,要求緩存服務(wù)器返回至少還沒過指定時(shí)間的緩存資源。
    • Cache-Control: max-stale=3600,指緩存資源,即使過期也照常接收。
    • Cache-Control: only-if-cached,要求緩存服務(wù)器不重新加載響應(yīng),也不會(huì)再次確認(rèn)資源有效性。如果請求緩存服務(wù)器的本地緩存無響應(yīng),則返回504。
    • Cache-Control: must-revalidate,代理會(huì)向資源服務(wù)器再次驗(yàn)證即將返回的響應(yīng)緩存是否有效。使用該指令會(huì)忽略max-stale。
    • Cache-Control: proxy-revalidate,緩存服務(wù)器收到請求,必須再次驗(yàn)證緩存有效性。
    • Cache-Control: no-transform,緩存不能改變實(shí)體主體的媒體類型。可防止緩存或代理壓縮圖片等類似操作。

Connection

  • 控制不再轉(zhuǎn)發(fā)給代理的首部字段
    Connection: 不在轉(zhuǎn)發(fā)的首部字段名
  • 管理持久連接
    Connection: close,當(dāng)服務(wù)端明確斷開連接是,則指定Connection首部字段的值為Close。
    Connection: Keep-Alive,HTTP/1.1默認(rèn)連接為持久連接。

Data表示創(chuàng)建HTTP報(bào)文的日期和時(shí)間,時(shí)間格式:Date: Tue, 03 Jul 2012 04:40:59 GMT

Pragma:HTTP/1.1之前版本的歷史遺留字段,Pragma: no-cache。類似Cache-Control: no-cache

Trailer:說明:Trailer會(huì)事先說明報(bào)文主體后記錄了哪些首部字段。該首部字段可應(yīng)用在HTTP/1.1版本分塊傳輸編碼時(shí)。

Transfer-Encoding

  • 規(guī)定了傳輸報(bào)文主體時(shí)采用的編碼方式。
  • HTTP/1.1的傳輸編碼方式僅對分塊傳輸編碼有效。

Upgrade

  • 用于檢測HTTP協(xié)議及其他協(xié)議是否可使用更高的版本進(jìn)行通訊,其參數(shù)值可以用來制定一個(gè)完全不同的通信協(xié)議。
  • 使用首部字段Upgrade時(shí),還需額外制定Connection: Upgrade

Via

  • 報(bào)文經(jīng)過代理或網(wǎng)關(guān)時(shí),會(huì)先在首部字段Via中附加該服務(wù)器的信息,然后再轉(zhuǎn)發(fā)。
  • Via不僅用于追蹤報(bào)文的轉(zhuǎn)發(fā),還可避免請求回環(huán)的發(fā)生。

Warning

  • 從HTTP/1.0的響應(yīng)首部(Retry-After)演變過來,告知用戶一些與緩存相關(guān)的問題和警告。
  • 格式:Warning: [警告碼] [警告的主機(jī):端口號] "[警告內(nèi)容]" ([日期時(shí)間])

110 Response is stale 代理返回已過期的資源
111 Revalidation failed 代理再驗(yàn)證資源有效性時(shí)失?。ǚ?wù)器無法到達(dá)等原因)
112 Disconnection operation 代理與互聯(lián)網(wǎng)連接被故意切斷
113 Heuristic expiration 響應(yīng)的使用期超過24小時(shí)
199 Miscellaneous warning 任意的警告內(nèi)容
214 Transformation applied 代理對內(nèi)容編碼或媒體類型等執(zhí)行了某些處理時(shí)
299 Miscellaneous persistent warning 任意的警告內(nèi)容

6. 請求首部字段
  **Accept**
  - 告訴服務(wù)器,用戶代理能夠處理的媒體類型及媒體類型的相對優(yōu)先級。
  - 可使用`type/subtype`這種形式,一次指定多種媒體類型。q代表權(quán)重,范圍是0~1
`Accept: text/html,application/Xhtml+xml,application/xml;q=0.9,*/*;q=0.8`

  **Accept-Charset**:用來通知服務(wù)器用戶代理支持的**字符集及字符集的相對優(yōu)先級**

  **Accept-Encoding**
  - 用來告知服務(wù)器用戶代理支持的**內(nèi)容編碼及內(nèi)容編碼的優(yōu)先級順序**
  - `Accept-Encoding: gzip, deflate`

  **Accept-Language**:告知服務(wù)器用戶代理能夠處理的**自然語言集,以及相對優(yōu)先級**

  **Authorization**:用來告知服務(wù)器,用戶代理的認(rèn)證信息。

  **Except**:告知服務(wù)器,期望出現(xiàn)的某種特定行為。

  **From**:告知服務(wù)器使用用戶代理的用戶的電子郵件地址。

  **Host**:告知服務(wù)器請求的資源所處的互聯(lián)網(wǎng)主機(jī)名和端口號。

  **If-Match**
  - 只有當(dāng)If-Match的字段值根ETag值匹配一致時(shí),服務(wù)器才會(huì)接受請求。反之,返回412狀態(tài)嗎
  - 如果使(\*)指定If-Match的字段值,服務(wù)器將會(huì)忽略ETag,只要資源存在就處理請求。

  **If-Modified-Since**:如果在If-Modified-Since字段指定的日期時(shí)間后,資源發(fā)生了更新,服務(wù)器會(huì)接受請求。

  **If-None-Match**:只有在If-None-Match的字段值與ETag值不一致時(shí),可處理請求。與If-Match首部字段的作用相反。

  **If-Range**:告知服務(wù)器若指定的If-Range字段值和請求資源的ETag值或時(shí)間一致時(shí),則作為范圍請求處理。反之,則返回全體資源。

  **If-Unmodified-Since**:與If-Modified-Since相反。
  **Max-Forwards**:轉(zhuǎn)發(fā)數(shù),每次轉(zhuǎn)發(fā)值減1.當(dāng)值變0時(shí),返回響應(yīng)。
  **Proxy-Authorization**
  - 接收到從代理服務(wù)器發(fā)來的認(rèn)證質(zhì)詢時(shí),客戶端會(huì)發(fā)送包含首部字段Proxy-Authorization的請求,以告知服務(wù)器認(rèn)證需要的信息。
  - 注意:認(rèn)證行為發(fā)生在客戶端與代理之間。

  **Range**:返回資源的指定范圍
  **Referer**:告知服務(wù)器請求的原始資源的URL
  **TE**:告知服務(wù)器客戶端能夠處理響應(yīng)的傳輸編碼方式及相對優(yōu)先級,與Accept-Encoding功能相似,但是用于傳輸編碼。
  **User-Agent**,告知服務(wù)器創(chuàng)建請求的瀏覽器和用戶代理名稱等信息。
7. 響應(yīng)首部字段
  **Accept-Ranges**
  - 告知客戶端服務(wù)器是否能處理范圍請求
  - 可指定的字段值有:可處理范圍請求時(shí)指定其為bytes,反之則指定其為none。

  **Age**:告知客戶端,源服務(wù)器在多久前創(chuàng)建了響應(yīng)。字段值的單位為秒。
  **ETag**:
  - 一種可將資源以字符串形式做唯一標(biāo)識的方式。
  - 資源更新時(shí),ETag需要更新。
  - 強(qiáng)ETag值,不論實(shí)體發(fā)生多么細(xì)微的變化都會(huì)改變其值。`ETag: "usagi-1234"`
  - 弱ETag值,只有資源發(fā)生了根本改變,才會(huì)改變ETag值。在字段值最開始附加W `ETag: W/"usagi-1234"`

  **Location**:重定向。
  **Proxy-Authenticate**:會(huì)把由代理服務(wù)器所要求的認(rèn)證信息發(fā)送給客戶端。
  **Retry-After**:告訴客戶端應(yīng)該多久之后再次發(fā)送請求。
  **Server**:告訴客戶端服務(wù)器上安裝的HTTP服務(wù)器應(yīng)用程序的信息。
  **Vary**:首部字段Vary可對緩存進(jìn)行控制。當(dāng)Vary字段值為Accept-Language,那么只有對持相同自然語言的請求返回緩存。
  **WWW-Authenticate**:用于HTTP訪問認(rèn)證。
8. 實(shí)體首部字段
  **Allow**:通知客戶端能夠支持Request-URI指定資源的HTTP方法。
  **Content-Encoding**:
  - 告知客戶端服務(wù)器對實(shí)體的主體部分選用的內(nèi)容編碼方式。內(nèi)容編碼是值在不丟失實(shí)體信息的前提下所進(jìn)行的壓縮。
  - 主要采用以下4種內(nèi)容編碼的方式。(gzip、compress、deflate、identity)

  **Content-Language**:告知客戶端,實(shí)體主體使用的自然語言。
  **Content-Length**:表明實(shí)體主體部分的大小,單位是字節(jié)。
  **Content-Location**:表示報(bào)文主體返回資源對應(yīng)的URI。
  **Content-MD5**:該字段的值是一串MD5算法生成的值,目的在于檢查報(bào)文主體在傳輸過程中是否保持完整。
  **Content-Range**:針對范圍的請求,返回響應(yīng)時(shí)使用的首部字段Content-Range,能告知客戶端作為響應(yīng)返回的實(shí)體的哪個(gè)部分符合范圍請求。
  **Content-Type**:說明了實(shí)體主體內(nèi)對象的媒體類型。
  **Expires**:告知客戶端資源實(shí)效日期,實(shí)效前,響應(yīng)的副本會(huì)一直被保存。
  **Last-Modified**:資源最終修改的時(shí)間。
9. 為Cookie服務(wù)的首部字段
  **Set-Cookie**:開始狀態(tài)管理所使用的Cookie信息,響應(yīng)首部字段

NAME=VALUE 賦予Cookie的名稱和其值(必需項(xiàng))。
expires=DATE Cookie的有效期,默認(rèn)為瀏覽器關(guān)閉前為止。
path=PATH 將服務(wù)器上的文件目錄作為Cookie的適用對象。
domain=域名 作為Cookie適用對象的域名,可設(shè)置domain用于跨域操作。
Secure 僅在HTTPS安全通信時(shí)才會(huì)發(fā)送Cookie。
HttpOnly 加以限制,使Cookie不能被JavaScript腳本訪問。

  **Cookie**:服務(wù)器接收到的Cookie信息,請求首部字段

Cookie: status=enable

首部字段Cookie會(huì)告知服務(wù)器,當(dāng)客戶端想要獲得HTTP狀態(tài)管理支持時(shí),就會(huì)在請求中包含從服務(wù)器接收到的Cookie。

10. 其他首部字段
  **X-Frame-Options**:用于控制網(wǎng)站內(nèi)在其他Web網(wǎng)站的Frame標(biāo)簽內(nèi)的顯示問題,目的是為了防止點(diǎn)擊劫持攻擊。有兩個(gè)值:**DENY**,拒絕;**SAMEORIGIN**,僅同源域名下的頁面匹配時(shí)許可。
  **X-XSS-Protection**:針對跨站腳本攻擊的一種對策。0:將XSS過濾設(shè)置成無效狀態(tài),1:相反。
  **DNT**:Do Not Track,意為拒絕個(gè)人信息被收集,是表示拒絕被精準(zhǔn)廣告追蹤的一種方法。0:同意被追蹤,1:拒絕被追蹤。
  **P3P**:通過利用P3P(The Platform for Privacy Preferences,在線隱私偏好平臺)技術(shù),可以讓W(xué)eb網(wǎng)站上的個(gè)人隱私變成一種僅供程序可理解的形式,以達(dá)到保護(hù)用戶隱私的目的。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容