前端培訓-中級階段(14)- HTTP 首部字段和狀態碼(2019-09-05期)

前端最基礎的就是 HTML+CSS+Javascript。掌握了這三門技術就算入門,但也僅僅是入門,如今前端開發的定義已經遠遠不止這些。前端小課堂(HTML/CSS/JS),本着提高技術水平,打牢基礎知識的中心思想,咱們開課啦(每週四)。html

HTTP 狀態返回碼

HTTP 狀態返回碼用來表示 HTTP 請求是否成功完成。響應被分爲 5 種類型:前端

  1. 消息型響應 (1xx)
  2. 成功響應 (2xx)
  3. 重定向 (3xx)
  4. 客戶端錯誤 (4xx)
  5. 服務器錯誤 (5xx)

HTTP 首部字段 (Headers)

HTTP 消息首部被用來描述資源信息,或者用於描述客戶端和服務器的行爲。HTTP 消息頭容許客戶端和服務器經過 request 和 response 傳遞附加信息。一個請求頭由名稱不區分大小寫)後跟一個冒號 :,冒號後跟具體的(不帶換行符)組成。該值前面的引導空白會被忽略。web

原始定義在 RFC 4229,也能夠在 IANA registry 找到。IANA 同時也維護着一份 registry of proposed new HTTP message headers。自定義的專有首部能夠加上 X- 前綴。算法

根據不一樣上下文分類

根據不一樣上下文,可將消息頭分爲:json

  • 通常頭: 同時適用於請求和響應消息,但與最終消息主體中傳輸的數據無關的消息頭。
  • 請求頭: 包含更多有關要獲取的資源或客戶端自己信息的消息頭。
  • 響應頭: 包含有關響應的補充信息,如其位置或服務器自己(名稱和版本等)的消息頭。
  • 實體頭: 包含有關實體主體的更多信息,好比主體長度( Content-Length ) 或其 MIME類型。

根據代理對其的處理方式分類

端到端消息頭

這類消息頭必須被傳輸到最終的消息接收者,也即,請求的服務器或響應的客戶端。中間的代理服務器必須轉發未經修改的端到端消息頭,而且必須緩存它們。segmentfault

逐跳消息頭

這類消息頭僅對單次傳輸鏈接有意義,不能經過代理或緩存進行從新轉發。這些消息頭包括 Connection, Keep-Alive, Proxy-Authenticate, Proxy-Authorization, TE, Trailer, Transfer-EncodingUpgrade。注意,只能使用 Connection 來設置逐跳通常頭。瀏覽器

經常使用

  1. 緩存相關緩存

    1. ETag
      是資源的特定版本的標識符。這可讓緩存更高效,並節省帶寬,由於若是內容沒有改變,Web服務器不須要發送完整的響應。而若是內容發生了變化,使用ETag有助於防止資源的同時更新相互覆蓋(「空中碰撞」)。
      若是給定URL中的資源更改,則必定要生成新的Etag值。 所以Etags相似於指紋,也可能被某些服務器用於跟蹤。 比較etags能快速肯定此資源是否變化,但也可能被跟蹤服務器永久存留。
      ETag 屬性之間的比較採用的是弱比較算法,即兩個文件除了每一個比特都相同外,內容一致也能夠認爲是相同的。例如,若是兩個頁面僅僅在頁腳的生成時間有所不一樣,就能夠認爲兩者是相同的。
    2. If-None-Match
      是一個條件式請求首部。對於 GET 和 HEAD 請求方法來講,當且僅當服務器上沒有任何資源的 ETag 屬性值與這個首部中列出的相匹配的時候,服務器端會才返回所請求的資源,響應碼爲 200 。對於其餘方法來講,當且僅當最終確認沒有已存在的資源的 ETag 屬性值與這個首部中所列出的相匹配的時候,纔會對請求進行相應的處理。
    3. If-Modified-Since
      是一個條件式請求首部,服務器只在所請求的資源在給定的日期時間以後對內容進行過修改的狀況下才會將資源返回,狀態碼爲 200 。若是請求的資源從那時起未經修改,那麼返回一個不帶有消息主體的 304 響應,而在 Last-Modified 首部中會帶有上次修改時間。
      不一樣於If-Unmodified-Since, If-Modified-Since 只能夠用在 GET 或 HEAD 請求中。當與 If-None-Match 一同出現時,它(If-Modified-Since)會被忽略掉,除非服務器不支持 If-None-Match
      最多見的應用場景是來更新沒有特定 ETag 標籤的緩存實體。
    4. Cache-Control
      通用消息頭字段,被用於在http請求和響應中,經過指定指令來實現緩存機制。緩存指令是單向的,這意味着在請求中設置的指令,不必定被包含在響應中。
    5. Pragma
      在 HTTP/1.0 中規定的通用首部,這個首部的效果依賴於不一樣的實現,因此在「請求-響應」鏈中可能會有不一樣的效果。它用來向後兼容只支持 HTTP/1.0 協議的緩存服務器,那時候 HTTP/1.1 協議中的 Cache-Control 尚未出來。
    6. Last-Modified
      是一個響應首部,其中包含源頭服務器認定的資源作出修改的日期及時間。 它一般被用做一個驗證器來判斷接收到的或者存儲的資源是否彼此一致。
      因爲精確度比 ETag 要低,因此這是一個備用機制。
      包含有 If-Modified-SinceIf-Unmodified-Since 首部的條件請求會使用這個字段。
    7. Expires
      包含日期/時間, 即在此時候以後,響應過時。
      無效的日期,好比 0, 表明着過去的日期,即該資源已通過期。
      若是在Cache-Control響應頭設置了 "max-age" 或者 "s-max-age" 指令,那麼 Expires 頭會被忽略。
  2. 安全相關安全

    1. Strict-Transport-Security
      HSTS是一個安全功能,它告訴瀏覽器只能經過HTTPS訪問當前資源,而不是HTTP。
    2. Content-Security-Policy
      內容安全策略(CSP) 是一個額外的安全層,用於檢測並削弱某些特定類型的攻擊,包括跨站腳本 (XSS) 和數據注入攻擊等。不管是數據盜取、網站內容污染仍是散發惡意軟件,這些攻擊都是主要的手段。
    3. Authorization
      驗證用戶代理身份的憑證,一般會在服務器返回401 Unauthorized 狀態碼以及WWW-Authenticate 消息頭以後在後續請求中發送此消息頭。
  3. 資源相關服務器

    1. Content-Type
      用於指示資源的MIME類型 media type

      1. text/plain
      2. application/json
        {"a":1}
      3. application/x-www-form-urlencoded
        a=1&b=2
      4. multipart/form-data

        POST /foo HTTP/1.1
        Content-Length: 68137
        Content-Type: multipart/form-data; boundary=---------------------------974767299852498929531610575
        
        ---------------------------974767299852498929531610575
        Content-Disposition: form-data; name="description" 
        
        some text
        ---------------------------974767299852498929531610575
        Content-Disposition: form-data; name="myFile"; filename="foo.txt" 
        Content-Type: text/plain 
        
        (content of the uploaded file foo.txt)
        ---------------------------974767299852498929531610575

HTTP 首部字段詳解

Cache-Control

控制緩存的行爲,多個指令之間經過逗號分隔,如Cache-Control: private, max-age=0, no-cache

請求指令:

  1. no-cache,防止接收過時的資源,指示代理服務器(緩存服務器)每次都向源服務器確認資源的有效期。
  2. no-store, 不緩存該請求的任一部分,暗示請求中包含機密信息。
  3. max-age=[秒], 參數值必須,若是緩存資源的時長比該值小則接收緩存的資源,http/1.1 版本的服務器會優先處理max-age而忽略Expires,http/1.0 版本服務器則相反。
  4. max-stale(=[秒]),即便緩存資源已過時,只要在指定時間內則接收響應資源,不指定參數值的話表示不論過了多久都接收響應。
  5. min-fresh=[秒],參數值必須,指定服務器返回還未過指定時間的緩存資源。
  6. no-transform,緩存不能改變主體的媒體類型,防止代理壓縮圖片等操做。
  7. only-if-cached, 只請求緩存服務器上的緩存資源,不對緩存資源有效期確認,若是緩存服務器的本地緩存無響應則返回狀態碼 504 Gateway Timeout

響應指令:

  1. private, 指示代理服務器(緩存服務器)只對特定用戶提供資源緩存服務。
  2. public, 全部用戶均可以使用緩存。
  3. no-cache(=[value]), 參數值可選,當指定參數值後指示緩存服務器再也不對資源進行緩存,如Cache-Control: no-cache=Location
  4. no-store, 不緩存該響應的任一部分,暗示響應中包含機密信息。
  5. no-transform, 緩存不能改變主體的媒體類型,防止代理壓縮圖片等操做。
  6. must-revalidate, 指示代理服務器在返回響應的緩存資源前向源服務器驗證該緩存目前是否有效,若是代理沒法鏈接源服務器的話會返回504 Gateway Timeout狀態碼,使用該指令會忽略請求的max-stale指令。
  7. proxy-revalidate,指示代理服務器對緩存資源的有效性進行確認。
  8. max-age=[秒], 參數值必須,指示緩存服務器在該時間內沒必要再向源服務器確認緩存資源的有效性。
  9. s-maxage=[秒], 參數值必須,與max-age功能相同,不一樣的是該指令只適用於供多位用戶使用的公共緩存服務器,使用該指令後會忽略對Expires首部字段及max-age指令的處理。

另外,可使用自定義的指令,但這種擴展的指令僅對能理解它的代理服務器有意義。以下的community指令,Cache-Control自己沒有這個指令,若是緩存服務器不能理解這個指令,則會忽略它:Cache-Control: private, community="UCI"

Connection

管理持久鏈接和控制再也不轉發的首部字段。如當服務器想明確斷開鏈接的時候發送 Connection: close,在http/1.1以前版本協議上使用持久鏈接的話客戶端發送 Connection: Keep-Alive(服務端會返回包含Connection和Keep-Alive首部字段的響應)。Connection: Upgrade則是指示再也不轉發Upgrade首部。

Date

代表建立 http 報文的日期時間,如 date: Tue, 27 Aug 2019 07:25:02 GMT

Pragma

http/1.1 以前版本的遺留字段,只用在客戶端發送的請求中,要求全部的中間服務器不返回緩存的資源:Pragma: no-cache。若是全部的中間服務器都使用 http/1.1 版本的話則應直接使用 Cache-Control: no-cache

Trailer

指示在報文主體以後記錄了那些首部字段,Trailer 用在 http/1.1 響應首部中容許發送方在分塊發送的消息後面添加額外的元信息,如:

Transfer-Encoding

設置傳輸報文主體時的編碼方式爲分塊編碼傳輸:Transfer-Encoding: chunked

默認狀況下,HTTP 的響應消息體是做爲整包發送到客戶端的,用頭Content-Length來表示消息體的長度, 這個長度對客戶端很是重要,由於對於持久鏈接TCP並不會在請求完立馬結束,而是能夠發送屢次請求/響應,客戶端須要知道哪一個位置纔是響應消息的結束,以及後續響應的開始,所以Content-Length顯得尤其重要,服務端必須精確地告訴客戶端消息體的長度是多少。

若是Content-Length比實際返回的長度短,那麼就會形成內容截斷。
若是比實體內容長,客戶端就一直處於pendding狀態,直到全部的消息體都返回了請求才結束。

分塊編碼傳輸是另外一種解決方案:它把數據分解成一系列數據塊,並以多個塊發送給客戶端,服務器發送數據時再也不須要預先告訴客戶端發送內容的總大小,只需在響應頭裏面添加Transfer-Encoding: chunked,以此來告訴瀏覽器使用的是分塊傳輸編碼,這樣就不須要Content-Length
這就是分塊傳輸編碼Transfer-Encoding的做用。

HTTP 1.1引入分塊傳輸編碼提供瞭如下幾點好處:

  1. HTTP分塊傳輸編碼容許服務器爲動態生成的內容維持HTTP持久鏈接。一般,持久連接須要服務器在開始發送消息體前發送Content-Length消息頭字段,可是對於動態生成的內容來講,在內容建立完以前是不可知的。(動態內容,content-length沒法預知)
  2. 分塊傳輸編碼容許服務器在最後發送消息頭字段。對於那些頭字段值在內容被生成以前沒法知道的情形很是重要,例如消息的內容要使用散列進行簽名,散列的結果經過HTTP消息頭字段進行傳輸。沒有分塊傳輸編碼時,服務器必須緩衝內容直到完成後計算頭字段的值並在發送內容前發送這些頭字段的值。
  3. HTTP服務器有時使用壓縮 (gzip或deflate)以縮短傳輸花費的時間。分塊傳輸編碼能夠用來分隔壓縮對象的多個部分。在這種狀況下,塊不是分別壓縮的,而是整個負載進行壓縮,壓縮的輸出使用本文描述的方案進行分塊傳輸。在壓縮的情形中,分塊編碼有利於一邊進行壓縮一邊發送數據,而不是先完成壓縮過程以得知壓縮後數據的大小。(gzip壓縮,壓縮與傳輸同時進行)

Upgrade

檢測可否使用更高版本的協議進行通訊,由於Upgrade僅限於客戶端和鄰接服務器之間,因此還須要額外指定Connection: Upgrade

WebSocket是創建在Http基礎上的協議,所以,鏈接的發送方還是客戶端,確立WebSocket通訊鏈接後服務端能夠沒必要等待請求而直接向客戶端推送數據,並且WebSocket是一直保持鏈接狀態,首部信息量比Http要小。
爲了實現WebSocket通訊,須要在HTTP鏈接創建後完成一次握手步驟:

  1. 經過使用HTTP的Upgrade首部字段,Upgrade用來告訴服務器通訊協議發生改變,Sec-WebSocket-Key字段內記錄着握手過程當中必不可少的鍵值,Sec-WebSocket-Protocol字段內記錄使用的子協議。
  2. 對於客戶端的握手請求,服務器返回狀態碼101 Switching Protocols響應,Sec-WebSocket-Accept字段值是由握手請求中的Sec-WebSocket-Key的字段值生成的。
  3. 成功握手確立WebSocket鏈接以後,通訊再也不使用Http的數據幀,而採用WebSocket的數據幀。JavaScript能夠調用"The WebSocket API"(W3C標準制定)內提供的WebSocket程序接口,以實現WebSocket下的全雙工通訊。

Via

報文在通過代理或網關時,會在首部字段Via中附加該服務器的信息(使用的http版本等),Via首部是爲了追蹤傳輸路徑,其常常和TRACE方法一塊兒使用,好比代理服務器收到由TRACE方法發送過來的請求,當Max-Forwards: 0時代理服務器再也不轉發該請求,這時代理服務器將自身信息寫入Via首部後返回該請求的響應。

Warning

該首部一般告知用戶一些與代理緩存相關的問題的警告,Warning首部的格式及警告碼內容以下:
語法:Warning: <warn-code> <warn-agent> <warn-text> [<warn-date>]
示例:Warning: 110 - "Response is stale"

  • <warn-code>
    三位數字警告碼。第一位數字表示 Warning 信息在驗證以後是否須要從已存儲的響應中刪除。
    1xx 警告碼描述了關於當前響應的新鮮度或者驗證狀態的警告信息,而且將會在驗證以後被緩存服務器刪除。
    2xx 警告碼描述了驗證以後不會被修復的某些展示內容方面的警告信息,而且在驗證以後不會被緩存服務器刪除。

    碼值 文字描述 詳細說明
    110 Response is Stale 由緩存服務器提供的響應已過時(設置的失效時間已過)。
    111 Revalidation Failed 因爲沒法訪問服務器,響應驗證失敗。
    112 Disconnected Operation 緩存服務器斷開鏈接。
    113 Heuristic Expiration 若是緩存服務器採用啓發式方法,將緩存的有效時間設定爲24小時,而在該響應的年齡超過24小時時發送。
    199 Miscellaneous Warning 任意的、未明確指定的警告信息。
    214 Transformation Applied 由代理服務器添加,若是它對返回的展示內容進行了任何轉換,好比改變了內容編碼、媒體類型等。
    299 Miscellaneous Warning 與199相似,只不過指代的是持久化警告。
  • <warn-agent>
    添加到 Warning 首部的服務器或者軟件的名稱或者僞名稱(當代理不可知的時候能夠用 "-" 代替)。
  • <warn-text>
    用來描述錯誤信息的警告文本。
  • <warn-date>
    可選。假如多個 Warning 被髮送,那麼需包含一個與 Date 首部相對應的日期字段。

Content-Security-Policy

告訴用戶代理在一個頁面上能夠加載使用的資源。
內容安全策略 (CSP) 是一個額外的安全層,用於檢測並削弱某些特定類型的攻擊,包括跨站腳本 (XSS) 和數據注入攻擊等。
除此以外,html文件中設置 <meta>標籤也能夠配置該策略, 如<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

Accept

用戶指望的 MIME類型。告訴服務器,用戶能處理的媒體類型及其優先級。
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3。其中q用來指示優先級,使用分號;與媒體類型隔開,q的值從0.0到1.0,默認爲1.0:

Accept-Charset

用戶支持的字符集。告訴服務器,用戶支持的字符集及字符集的優先級。
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8。

Accept-Encoding

用戶支持的壓縮方法。告訴服務器,用戶支持的內容編碼及編碼的優先級。
Accept-Encoding: gzip, deflate, br
常見的內容編碼有 gzipcompressdeflateidentity(不執行壓縮的默認編碼格式),另外除了可使用q來指定優先級外也可使用通配符*來指定任意的編碼格式。

Accept-Language

用戶指望的天然語言。告訴服務器,用戶支持的天然語言集及其優先級。
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,und;q=0.7

Accept-Ranges

範圍請求可不能夠被處理,Accept-Ranges: none表示不能處理範圍請求,Accept-Ranges: bytes表示能夠處理範圍請求。

Authorization

用戶憑證。告訴服務器,用戶代理的認證信息(證書值)。
HTTP協議中的 Authorization 請求消息頭含有服務器用於驗證用戶代理身份的憑證,一般會在服務器返回 401 Unauthorized 狀態碼以及WWW-Authenticate 消息頭以後在後續請求中發送此消息頭。

Expect

客戶端發送Expect:100-Continue握手的目的,是爲了在客戶端在發送請求內容以前,判斷源服務器是否願意接受請求(基於請求頭部)。 xpect:100-Continue握手需謹慎使用,由於遇到不支持HTTP/1.1協議的服務器或者代理時會引發問題。

From

告知服務器使用用戶代理的用戶的電子郵箱地址。

Host

虛擬主機運行在同一個IP上,使用Host加以區分,如Host: www.lilnong.topHost首部字段是HTTP/1.1中惟一一個必須包含在請求內的首部字段,若是服務器未設定主機名則Host值爲空便可。

If-Match

只有當If-Match的字段值跟請求資源的ETag值匹配時服務器才接受請求(這時的服務器沒法使用弱ETag值),不然返回狀態碼412 Precondition Failed響應:

  1. If-None-Match, 只有當If-Match的字段值跟請求資源的ETag值不匹配時服務器才接受請求,利用它能夠獲取最新的資源。
  2. If-Modified-Since,請求的資源在指定日期後發生了更新服務器才接受請求,不然返回304 Not Modified(首部字段Last-Modified能夠獲取資源的更新日期),其做用與If-Match相似。
  3. If-Unmodified-Since, 請求的資源在指定日期後未發生更新服務器才接受請求,不然返回412 Precondition Failed響應。
  4. If-Range、Range, 請求的資源指定的ETag值或時間匹配時則可做爲範圍請求處理,不然返回所有資源。

Max-Forwards

經過TRACEOPTIONS方法發送包含首部字段Max-Forwards的請求時,能夠指定通過的服務器最大數目,當服務器收到收到值爲0的請求時再也不進行轉發,直接返回響應,對此咱們能夠肯定那臺終點服務器的通訊狀態

Proxy-Authorization

接收到從代理服務器發來的認證質詢時,客戶端會發送包含該首部字段的請求,以告知認證所須要的信息,客戶端與服務器之間的認證則使用首部字段Authorization。

Referer

告知服務器請求的原始資源的URI,告訴服務器我是從哪一個頁面連接過來的,服務器藉此能夠得到一些信息用於處理,好比從我主頁上連接到一個朋友那裏,他的服務器就可以從HTTP Referer中統計出天天有多少用戶點擊我主頁上的連接訪問他的網站。

TE

告知服務器客戶端可以處理響應的傳輸編碼方式及相對優先級,與Accept-Encoding相像,可是用於傳輸編碼。

User-Agent

傳達瀏覽器或代理服務器的種類或名稱,由網絡爬蟲發起請求時,有可能在該字段內添加爬蟲做者的電子郵件地址。

Age

告知客戶端資源緩存的時間,如Age: 600表示資源距上次請求已通過了600秒,代理建立響應時必須加上該首部字段。

ETag

告知客戶端實體標識,ETag值是服務器給每一個資源分配的惟一性標識,如ETag: "82e323200c392ff89323acd12",當資源更新後其ETag值也會變化,以下。
強ETag值是指實體發生細微變化就會改變ETag值。
弱ETag值只有當資源發生根本改變產生差別時纔會更新,弱ETag值會在字段值前加一個"W/",如ETag: W/usagi-1234

Location

提示瀏覽器重定向到另外一個URI位置,該字段通常會配合3xx: Redirection的響應

Proxy-Authenticate

將代理服務器所要求的認證信息發送給客戶端,如Proxy-Authenticate: Basic realm="Usagidesign Auth"。服務器與客戶端之間進行認證時,首部字段WWW-Authorization有着相同的做用。

Retry-After

告訴客戶端在指定的秒數後或指定的時間(GMT格式)再次發起請求,主要配合狀態碼503 Service Unavailable響應或3xx Redirect響應使用。

Server

告知客戶端http服務器信息,如Server: Apache/2.2.6

Vary

對緩存進行控制,源服務器會向代理服務器傳達關於本地緩存使用方法的命令。

WWW-Authorization

通知客戶端適用於請求URI所指定資源的認證方案(Basic或Digest)和帶參數提示的質詢,狀態碼401 Unauthorized響應中確定帶有該首部字段,如WWW-Authorization: Basic realm="Usagidesign Auth"

Allow

當服務器收到不支持的方法請求時,會返回405 Method Not Found,並將其支持的方法寫入到Allow首部字段中,如Allow: GET, HEAD

Content

  1. Content-Encoding 告知客戶端服務器對實體主體部分選用的內容編碼方式,如Content-Encoding: gzip
  2. Content-Language, 告知客戶端實體主體使用的語言,如Content-Language: zh-CN
  3. Content-Length, 實體主體部分的大小(字節),對實體主體進行內容編碼傳輸時,不能使用該首部字段。
  4. Content-Location, 指定報文主體返回資源對應的URI,好比,當返回的內容頁面與實際請求的對象不一樣時,在該首部字段內寫入URI。
  5. Content-MD5,報文主體的MD5值,使用Base64編碼。
  6. Content-Range, 針對範圍請求,告知客戶端返回的實體的範圍及整個實體的大小,如:Content-Range: bytes 5001-10000/10000
  7. Content-Type
    用於描述服務器文檔的 MIME類型。幫助用戶代理(瀏覽器)去處理接收到的數據。
    實體主體內對象的媒體類型,和首部字段 Accept 同樣採用type/subtype形式,如 Content-Type: text/html; charset=UTF-8

Expires

告知客戶端或緩存服務器資源失效時間,超出該時間後緩存服務器應該從源服務器獲取該資源,如Expires: Wed, 23 May 2012 09:59:55 GMT。源服務器不但願緩存服務器緩存的時候能夠將該字段寫入與Date相同的時間值。

Last-Modified

指明資源最終修改的時間,如Last-Modified: Wed, 23 May 2012 09:59:55 GMT

Cookie、Set-Cookie

Cookie是由服務器端生成,發送給瀏覽器,將Cookiekey/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該Cookie給服務器。
Set-Cookie屬於響應首部字段,包含了狀態管理所使用的Cookie信息。
Cookie屬於請求首部字段,用來通知服務端當前頁面的域生效中的cookie

Set-Cookie字段的屬性必須包含賦予cookie的名稱和值,其它屬性有:

  1. expires,cookie的有效期,不指定的話則默認爲瀏覽器關閉爲止,若是設置一個過去的時間,瀏覽器會當即刪除該cookie。
  2. path,將服務器上指定文件目錄做爲cookie的適用對象,若不指定則默認爲文檔所在的文件目錄。
  3. domain,做爲cookie適用對象的域名(結尾匹配,好比指定lilnong.top後,除lilnong.top外,www.lilnong.top和www2.lilnong.top均可以發送Cookie),若不指定則默認爲建立cookie的服務器的域名。
  4. secure,僅在https通訊下才會發送cookie,指定secure屬性的方式如:Set-Cookie: name=value, secure
  5. HttpOnly使JavaScript腳本沒法得到cookie,其主要目的是爲防止跨站腳本攻擊(XSS)對cookie信息的竊取。

Content-Dispositison

用來指示如何顯示附加的文件,即設置Content-Disposition告訴瀏覽器下載文件的名稱和是否在瀏覽器中內嵌顯示,如:

  1. Content-disposition: inline; filename=1502849449726.jpg 表示瀏覽器內嵌顯示一個文件。
  2. Content-disposition: attachment; filename=1502849449726.xlsx 表示彈出下載提示對話框來下載文件。

X-Frame-Options

屬於http響應首部,用來控制網站內容在其它web網站的Frame標籤內的顯示,其主要目的是爲了防止點擊劫持(clickjacking)攻擊,如將其設爲字段值DENY的話就是拒絕,頁面不能被嵌入到任何iframe或frame中,SAMEORIGIN則爲頁面只能被本站頁面嵌入到iframe或者frame中(好比當指定http://hackr.jp/sample.html頁面爲SAMEORIGIN時,hackr.jp上全部頁面的frame都被容許可加載該頁面,其它域名的頁面就不行),ALLOW-FROM:頁面容許frame或frame加載。

微信公衆號:前端linong

clipboard.png

資料

  1. 前端培訓目錄、前端培訓規劃、前端培訓計劃
  2. HTTP | MDN
  3. HTTP緩存 | MDN
  4. HTTP Headers | MDN
  5. HTTP 響應代碼 響應狀態碼 | MDN
  6. http首部字段
  7. HTTP----HTTP緩存機制
相關文章
相關標籤/搜索