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

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

HTTP 狀態返回碼

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

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

HTTP 首部字段 (Headers)

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

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

根據不同上下文分類

根據不同上下文,可將消息頭分爲:

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

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

端到端消息頭

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

逐跳消息頭

這類消息頭僅對單次傳輸連接有意義,不能通過代理或緩存進行重新轉發。這些消息頭包括 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緩存機制
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章