網(wǎng)絡(luò)編程 - HTTP協(xié)議

HTTP協(xié)議,全稱超文本傳輸協(xié)議(HyperText Transfer Protocol),是目前互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,位于應(yīng)用層。

一、HTTP基礎(chǔ)

1.HTTP協(xié)議用于客戶端和服務(wù)端之間的通信

兩臺(tái)計(jì)算機(jī)之間使用HTTP協(xié)議通信時(shí),必有一端是客戶端,另外一端是服務(wù)器端。其中請求訪問資源的一端為客戶端,提供資源響應(yīng)的一端稱為服務(wù)器端。有時(shí)候兩臺(tái)計(jì)算機(jī)的角色可能會(huì)互換,但是僅從一條通信路線來說,客戶端和服務(wù)器端的角色是確定的。

2.通過請求和響應(yīng)的交換達(dá)成通信

HTTP協(xié)議規(guī)定,請求從客戶端發(fā)出,最后服務(wù)器端響應(yīng)該請求并返回。

3.HTTP是不保存狀態(tài)的協(xié)議

HTTP是一種無狀態(tài)協(xié)議。協(xié)議自身不對請求和響應(yīng)之間的通信狀態(tài)進(jìn)行保存。也就是說在 HTTP 這個(gè)級別,協(xié)議對于發(fā)送過的請求或響應(yīng)都不做持久化處理。這是為了更快地處理大量事務(wù),確保協(xié)議的可伸縮性,而特意把 HTTP 協(xié)議設(shè)計(jì)成如此簡單的??墒请S著 Web 的不斷發(fā)展,我們的很多業(yè)務(wù)都需要對通信狀態(tài)進(jìn)行保存。于是我們引入了 Cookie 技術(shù)。有了 Cookie 再用 HTTP 協(xié)議通信,就可以管理狀態(tài)了。

4.請求URI定位資源

HTTP協(xié)議使用 URI 定位互聯(lián)網(wǎng)上的資源。正是因?yàn)?URI 的特定功能,在互聯(lián)網(wǎng)上任意位置的資源都能訪問到。

5.告知服務(wù)器意圖的 HTTP 方法

方法名 說明 描述 支持版本
GET 獲取資源 GET 方法用來請求訪問已被 URI 識(shí)別的資源。指定的資源經(jīng)服務(wù)器端解析后返回響應(yīng)內(nèi)容 1.0 1.1
POST 傳輸實(shí)體主體 POST 方法用來傳輸實(shí)體的主體。雖然 GET 也可以傳輸實(shí)體的主體,但一般不用 GET 而用 POST,POST 的主要目的并不是獲取響應(yīng)的主體內(nèi)容 1.0 1.1
PUT 傳輸文件 PUT方法用來傳輸文件,要求再請求報(bào)文的主體中包含文件內(nèi)容,然后保存到請求URI指定的位置 1.0 1.1
HEAD 獲取報(bào)文首部 HEAD 方法和 GET 方法一樣,只是不返回報(bào)文主體部分。用于確認(rèn) URI 的有效性及資源更新的日期時(shí)間等等 1.0 1.1
DELETE 刪除文件 與 PUT 相反的方法,DELETE 方法按請求 URI 刪除指定資源 1.0 1.1
OPTIONS 詢問支持的方法 OPTIONS 用來查詢針對請求 URI 指定的資源支持的方法 1.1
TRACE 追蹤路徑 TRACE 方法是讓 Web 服務(wù)器將之前的請求通信返回給客戶端的方法,TRACE 方法不常用,并且容易引發(fā) XST ( Cross-Site-Tracing ,跨站追蹤)攻擊,所以通常更不會(huì)用到了 1.1
CONNECT 要求用隧道協(xié)議連接代理 CONNECT 方法要求在與代理服務(wù)器通信時(shí)建立隧道,實(shí)現(xiàn)用隧道協(xié)議進(jìn)行 TCP 通信,主要使用 SSL ( Secure Sockets Layers ,安全套接層)和 TLS ( Transport Layer Security ,傳輸層安全)協(xié)議把通信內(nèi)容加密后經(jīng)網(wǎng)絡(luò)隧道傳輸 1.1
PATCH 更新部分文件內(nèi)容 當(dāng)資源存在的時(shí)候,PATCH 用于資源的部分內(nèi)容的更新,例如更新某一個(gè)字段。具體比如說只更新用戶信息的電話號碼字段,而 PUT 用于更新某個(gè)資源較完整的內(nèi)容,比如說用戶要重填完整表單更新所有信息,后臺(tái)處理更新時(shí)可能只是保留內(nèi)部記錄 ID 不變。 當(dāng)資源不存在的時(shí)候,PATCH 是修改原來的內(nèi)容,也可能會(huì)產(chǎn)生一個(gè)新的版本。比如當(dāng)資源不存在的時(shí)候,PATCH 可能會(huì)去創(chuàng)建一個(gè)新的資源,這個(gè)意義上像是 saveOrUpdate 操作。而 PUT 只對已有資源進(jìn)行更新操作,所以是 update 操作 1.1

6.持久鏈接節(jié)省通信量

HTTP協(xié)議的初始版本中,每進(jìn)行一個(gè) HTTP 通信都要斷開一次 TCP 連接。比如使用瀏覽器瀏覽一個(gè)包含多張圖片的 HTML 頁面時(shí),在發(fā)送請求訪問 HTML 頁面資源的同時(shí),也會(huì)請求該 HTML 頁面里包含的其他資源。因此,每次的請求都會(huì)造成無謂的 TCP 連接建立和斷開,增加通信量的開銷。

6.1 持久鏈接

為了解決上述 TCP 連接的問題,HTTP/1.1 和部分 HTTP/1.0 想出了持久連接的方法。其特點(diǎn)是,只要任意一端沒有明確提出斷開連接,則保持 TCP 連接狀態(tài)。旨在建立一次 TCP 連接后進(jìn)行多次請求和響應(yīng)的交互。在 HTTP/1.1 中,所有的連接默認(rèn)都是持久連接。它的好處在于減少了TCP連接的重復(fù)建立和斷開所造成的額外開銷,減輕了服務(wù)器端的負(fù)載。

6.2管線化(pipelining)

持久連接使得多數(shù)請求以管線化方式發(fā)送成為可能。以前發(fā)送請求后需等待并接收到響應(yīng),才能發(fā)送下一個(gè)請求。管線化技術(shù)出現(xiàn)后,不用等待亦可發(fā)送下一個(gè)請求。這樣就能做到同時(shí)并行發(fā)送多個(gè)請求,而不需要一個(gè)接一個(gè)地等待響應(yīng)了。比如,當(dāng)請求一個(gè)包含多張圖片的 HTML 頁面時(shí),與挨個(gè)連接相比,用持久連接可以讓請求更快結(jié)束。而管線化技術(shù)要比持久連接速度更快。請求數(shù)越多,時(shí)間差就越明顯。

7.使用Cookie的狀態(tài)管理

Cookie 技術(shù)通過在請求和響應(yīng)報(bào)文中寫入 Cookie 信息來控制客戶端的狀態(tài)。Cookie 會(huì)根據(jù)從服務(wù)器端發(fā)送的響應(yīng)報(bào)文內(nèi)的一個(gè)叫做 Set-Cookie 的首部字段信息,通知客戶端保存Cookie。當(dāng)下次客戶端再往該服務(wù)器發(fā)送請求時(shí),客戶端會(huì)自動(dòng)在請求報(bào)文中加入 Cookie 值后發(fā)送出去。服務(wù)器端發(fā)現(xiàn)客戶端發(fā)送過來的 Cookie 后,會(huì)去檢查究竟是從哪一個(gè)客戶端發(fā)來的連接請求,然后對比服務(wù)器上的記錄,最后得到之前的狀態(tài)信息。

二、HTTP工作流程

2.1 TCP/IP通信傳輸流

HTTP協(xié)議是站在在TCP/IP協(xié)議肩膀上的,從HTTP往下看,是TCP協(xié)議保證了運(yùn)輸?shù)目煽啃裕荌P協(xié)議保證了數(shù)據(jù)可以達(dá)到目標(biāo)地址,是以太網(wǎng)協(xié)議在局域網(wǎng)內(nèi)傳遞信息。所以說HTTP工作流程,先談TCP/IP通信傳輸流。


TCP:IP通信傳輸流.png

利用 TCP/IP 協(xié)議族進(jìn)行網(wǎng)絡(luò)通信時(shí),會(huì)通過分層順序與對方進(jìn)行通信。發(fā)送端從應(yīng)用層往下走,接收端則從鏈路層往上走。

  • 首先作為發(fā)送端的客戶端在應(yīng)用層(HTTP 協(xié)議)發(fā)出一個(gè)想看某個(gè) Web 頁面的 HTTP 請求。
  • 為了傳輸方便,在傳輸層(TCP 協(xié)議)把從應(yīng)用層處收到的數(shù)據(jù)(HTTP 請求報(bào)文)進(jìn)行分割,并在各個(gè)報(bào)文上打上標(biāo)記序號及端口號后轉(zhuǎn)發(fā)給網(wǎng)絡(luò)層。
  • 在網(wǎng)絡(luò)層(IP 協(xié)議),增加作為通信目的地的 MAC 地址后轉(zhuǎn)發(fā)給鏈路層。這樣一來,發(fā)往網(wǎng)絡(luò)的通信請求就準(zhǔn)備齊全了。
  • 接收端的服務(wù)器在鏈路層接收到數(shù)據(jù),按序往上層發(fā)送,一直到應(yīng)用層。當(dāng)傳輸?shù)綉?yīng)用層,才能算真正接收到由客戶端發(fā)送過來的 HTTP請求。

2.2 HTTP請求流程

HTTP請求流程.png
  • 發(fā)送端在層與層之間傳輸數(shù)據(jù)時(shí),每經(jīng)過一層時(shí)必會(huì)被打上該層所屬的頭部信息。
  • 接收端在層與層之間傳輸數(shù)據(jù)時(shí),每經(jīng)過一層時(shí)會(huì)把對應(yīng)的頭部消去。

具體介紹如下:

  1. 地址解析
    比如我們用百度搜索swift
http://www.baidu.com/baidu?wd=swift

協(xié)議名:http。這里指要發(fā)出的是什么協(xié)議。
主機(jī)名:www.baidu.com。通過DNS解析,我們可以把主機(jī)名解析成服務(wù)器的IP地址。
請求文件名:baidu。當(dāng)我們訪問到服務(wù)器后,就可以通過文件名請求指定的文件。
請求參數(shù):wd=swift。即使同一個(gè)網(wǎng)頁,可能針對不同的用戶,服務(wù)器要返回給客戶端的信息也是不一樣的 。而服務(wù)器就是通過URL中“?”后面攜帶的參數(shù)不同來響應(yīng)不同的用戶或者同一個(gè)用戶的不同請求的。

  1. 封裝HTTP 請求
    這一步把上面寫的 URL 以及本機(jī)的一些信息封裝成一個(gè) HTTP 請求數(shù)據(jù)包
  2. 封裝 TCP 包
    第三步就是封裝 TCP 包 , 建立 TCP 連接 , 也就是常說的"三次握手"。
  3. 客戶端發(fā)送請求命令
    在連接建立之后 , 客戶端發(fā)送 HTTP 請求到服務(wù)端與請求相關(guān)的信息都會(huì)包含在請求頭和請求體中發(fā)送給服務(wù)器端 。
  4. 服務(wù)器端響應(yīng)
    服務(wù)器端在收到請求之后 , 根據(jù)客戶端的請求發(fā)送給客戶端相應(yīng)的信息 , 相關(guān)的響應(yīng)信息都會(huì)放在響應(yīng)頭和響應(yīng)體中。
  5. 關(guān)閉連接
    服務(wù)器端在發(fā)送完響應(yīng)之后 , 就會(huì)關(guān)閉連接 , 如果過客戶端的請求的頭部信息中有 Connection-alive , 那么客戶端在響應(yīng)完這個(gè)請求之后不會(huì)關(guān)閉連接 , 知道客戶端的所有請求都響應(yīng)完畢 , 才會(huì)關(guān)閉連接 , 這樣大大節(jié)省了帶寬和 IO 資源。

三、HTTP協(xié)議報(bào)文結(jié)構(gòu)

1.報(bào)文

用于 HTTP 協(xié)議交互的信息被稱為 HTTP 報(bào)文。請求端(客戶端)的 HTTP 報(bào)文叫做請求報(bào)文;響應(yīng)端(服務(wù)器端)的叫做響應(yīng)報(bào)文。HTTP 報(bào)文本身是由多行(用 CR+LF 作換行符)數(shù)據(jù)構(gòu)成的字符串文本。

2.報(bào)文結(jié)構(gòu)

HTTP 報(bào)文大致可分為報(bào)文首部和報(bào)文主體兩部分。兩者由最初出現(xiàn)的空行(CR+LF)來劃分。通常,并不一定有報(bào)文主體。
報(bào)文結(jié)構(gòu)如下:

HTTP報(bào)文結(jié)構(gòu).png

3.請求報(bào)文及響應(yīng)報(bào)文的結(jié)構(gòu)

請求報(bào)文及響應(yīng)報(bào)文的結(jié)構(gòu).png

上面是請求報(bào)文,下面是響應(yīng)報(bào)文。


請求報(bào)文和響應(yīng)報(bào)文實(shí)例.png

上面是請求報(bào)文實(shí)例,下面是響應(yīng)報(bào)文實(shí)例。
請求報(bào)文和響應(yīng)報(bào)文的首部內(nèi)容由以下數(shù)據(jù)組成。

  • 請求行:包含用戶請求的方法,請求URI和HTTP版本。
  • 狀態(tài)行:包含表明響應(yīng)結(jié)果的狀態(tài)碼,原因短語和HTTP版本。
  • 首部字段:包含表示請求和響應(yīng)的各種條件和屬性的各類首部。一般有四種首部,分別是:通用首部、請求首部、響應(yīng)首部和實(shí)體首部。
  • 其他:可能包含HTTP的RFC里未定義的首部(Cookie等)。

舉個(gè)例子:
我們用Chrome瀏覽器打開百度,然后對當(dāng)前網(wǎng)頁進(jìn)行檢查,右鍵選擇檢查。然后刷新當(dāng)前頁面,選擇Netword選項(xiàng),就可以看到當(dāng)前頁面網(wǎng)絡(luò)活動(dòng)情況。查看www.baidu.com:

例子.png

我們來看一下,這里有什么:

General:
Request URL: https://www.baidu.com/
Request Method: GET
Status Code: 200 OK
Remote Address: 180.97.33.108:443
Referrer Policy: no-referrer-when-downgrade

Response Headers:

HTTP/1.1 200 OK
Bdpagetype: 1
Bdqid: 0xa9952ef000020d8a
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html
Cxy_all: baidu+9cadcdf18d354de5e0816c739f51f361
Date: Tue, 30 Oct 2018 08:50:53 GMT
Expires: Tue, 30 Oct 2018 08:50:27 GMT
Server: BWS/1.1
Set-Cookie: delPer=0; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=0; path=/
Set-Cookie: H_PS_PSSID=26524_1420_21093_27400_26350; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Vary: Accept-Encoding
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked

Request Headers:

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8
Cookie: BAIDUID=0A51A4710C9C0407204028C7D18379A0:FG=1; BIDUPSID=0A51A4710C9C0407204028C7D18379A0; PSTM=1529891328; BD_UPN=123253; MCITY=-315%3A; ispeed_lsm=3; delPer=0; BD_HOME=0; H_PS_PSSID=26524_1420_21093_27400_26350; BD_CK_SAM=1; PSINO=3

四、HTTP 報(bào)文首部字段具體分析

HTTP首部字段是構(gòu)成HTTP報(bào)文的要素之一。在客戶端與服務(wù)端之間以HTTP協(xié)議進(jìn)行通信的過程中,無論是請求還是響應(yīng)都會(huì)使用首部字段,它能起到傳遞額外重要信息的作用。比如給瀏覽器和服務(wù)器提供報(bào)文主體大小、所使用的語言、認(rèn)證信息等內(nèi)容。

1. HTTP首部字段結(jié)構(gòu)

HTTP首部字段是由首部字段名和字段值構(gòu)成,中間用冒號“:”分開。比如上面我們看到的:

Host: www.baidu.com
Connection: keep-alive
Pragma: no-cache

2. 4種HTTP首部字段類型

HTTP首部字段根據(jù)實(shí)際用途可以分為以下4種:

  • 通用首部字段:請求報(bào)文和響應(yīng)報(bào)文兩方都會(huì)使用的 首部。
  • 請求首部字段:從客戶端向服務(wù)器端發(fā)送請求報(bào)文時(shí)使用的首部。補(bǔ)充了請求的附加內(nèi)容、客戶端信息、響應(yīng)內(nèi)容相關(guān)優(yōu)先級等信息。
  • 響應(yīng)首部字段:從服務(wù)器端向客戶端返回響應(yīng)報(bào)文時(shí)使用的首部。補(bǔ)充了響應(yīng)的附加內(nèi)容,也會(huì)要求客戶端附加額外的內(nèi)容信息。
  • 實(shí)體首部字段:針對請求報(bào)文和響應(yīng)報(bào)文的實(shí)體部分使用的首部。補(bǔ)充了資源內(nèi)容更新時(shí)間等與實(shí)體有關(guān)的信息。

3.通用首部字段

首部字段名 說明
Cache-Control 控制緩存的行為,用于隨報(bào)文傳送緩存的指示
Connection 允許客戶端和服務(wù)器指定與請求/響應(yīng)連接有關(guān)的選項(xiàng)
Date 提供日期和時(shí)間標(biāo)志,說明報(bào)文是什么時(shí)間創(chuàng)建的
Pragma 報(bào)文指令,另一種隨報(bào)文傳送指示的方式,但并不專用于緩存
MIME-Version 給出了發(fā)送端使用的 MIME 版本
Trailer 如果報(bào)文采用了分塊傳輸編碼(chunked transfer encoding)方式,就可以用這個(gè)首部列出位于報(bào)文拖掛(trailer)部分的首部集合
Transfer- Encoding 告知接收端為了保證報(bào)文的可靠傳輸,對報(bào)文采用了什么編碼方式
Update 給出了發(fā)送端可能想要 “升級” 使用的新版本或協(xié)議
Via 顯示了報(bào)文經(jīng)過的中間節(jié)點(diǎn)(代理、網(wǎng)關(guān))
Warning 錯(cuò)誤通知

3.1 Cache-Control

通過指定首部字段Cache-Control的指令,就能操作緩存的工作機(jī)制。
指令的參數(shù)是可選的,多個(gè)指令之間通過“,”分隔。
緩存請求指令

指令 參數(shù) 說明
no-cache 強(qiáng)制向資源服務(wù)器再次驗(yàn)證
no-store 不緩存請求或響應(yīng)的任何內(nèi)容
max-age = [秒] 必需 響應(yīng)的最大Age值
max-stale ( = [秒]) 可忽略 接收已過期的響應(yīng)
min-fresh = [秒] 必需 期望在指定時(shí)間內(nèi)的響應(yīng)仍有效
no-transform 代理不可更改媒體類型
only-if-cached 從緩存獲取資源
cache-extension - 新指令標(biāo)記(token)

緩存響應(yīng)指令

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

4. 請求首部字段

首部字段名 說明
Accept 用戶可處理的媒體類型
Accept- Charset 優(yōu)先的字符集
Accept- Encoding 優(yōu)先的編碼內(nèi)容
Accept- Language 優(yōu)先的語言
TE 傳輸編碼的優(yōu)先級
Expect 期待服務(wù)器的特定行為
If-Match 比較實(shí)體標(biāo)記(ETAG)
If-Modified-Since 比較資源的更新時(shí)間
If-None-Match 比較實(shí)體標(biāo)記(與If-Match相反)
If-Range 資源未更新時(shí)發(fā)送實(shí)體Btye的范圍請求
If-Unmodified-Since 比較資源的更新時(shí)間(與If-Modified-Since相反)
Range 實(shí)體的字節(jié)范圍請求
Authorization WEB認(rèn)證信息
Cookie 客戶端用它向服務(wù)器傳送一個(gè)令牌
Cookie2 用來說明請求端支持的 cookie 版本
Max-Forward 在通往源端服務(wù)器的路徑上,將請求轉(zhuǎn)發(fā)給其他代理或網(wǎng)關(guān)的最大次數(shù)
Proxy-Authorization 代理服務(wù)器要求客戶端的認(rèn)證信息

5. 響應(yīng)首部字段

首部字段名 說明
Age 推算資源創(chuàng)建經(jīng)過時(shí)間
Public 服務(wù)器為其資源支持的請求方法列表
Retry-After 對再次發(fā)起請求的時(shí)機(jī)要求
Title 對 HTML 文檔來說,就是 HTML 文檔 的源端給出的標(biāo)題
Warning 比原因短語中更詳細(xì)一些的警告報(bào)文
Accept-Ranges 服務(wù)器可接受的范圍類型
Vary 代理服務(wù)器的安裝信息
Proxy-Authenticate 代理服務(wù)器對客戶端的認(rèn)證信息
Set-Cookie 在客戶端設(shè)置,以便服務(wù)器對客戶端進(jìn)行標(biāo)識(shí)
WWW-Authenticate 服務(wù)器對客戶端的認(rèn)證信息

5. 實(shí)體首部字段

首部字段名 說明
Allow 資源可支持的HTTP方法
Location 告知客戶端實(shí)體實(shí)際上位于何處
Content-Base16 解析主體中的相對 URL 時(shí)使用的基礎(chǔ) URL
Content-Encoding 實(shí)體主體適用的編碼方式
Content-Language 實(shí)體主體的自然語言
Content-Length 實(shí)體主體的大小(單位:字節(jié))
Content-Location 替代對應(yīng)資源的URI
Content-MD5 實(shí)體主體的報(bào)文摘要
Content-Range 實(shí)體主體的位置范圍
ETag 與此實(shí)體相關(guān)的實(shí)體標(biāo)記
Expires 實(shí)體主體的過期時(shí)間
Last-Modified 資源的最后修改日期時(shí)間

6. 其他首部字段

HTTP 首部字段是可以自行擴(kuò)展的。所以在 Web 服務(wù)器和瀏覽器的應(yīng)用上,會(huì)出現(xiàn)各種非標(biāo)準(zhǔn)的首部字段。以下是最為常用的首部字段:

6.1 X-Frame-Options

X-Frame-Options 屬于 HTTP 響應(yīng)首部,用于控制網(wǎng)站內(nèi)容在其他 Web 網(wǎng)站的 Frame 標(biāo)簽內(nèi)的顯示問題。其主要目的是為了防止點(diǎn)擊劫持(clickjacking)攻擊。首部字段 X-Frame-Options 有以下兩個(gè)可指定的字段值:

  • DENY:拒絕
  • SAMEORIGIN:僅同源域名下的頁面(Top-level-browsing-context)匹配時(shí)許可

6.2 X-XSS-Protection

X-XSS-Protection 屬于 HTTP 響應(yīng)首部,它是針對跨站腳本攻擊(XSS)的一種對策,用于控制瀏覽器 XSS 防護(hù)機(jī)制的開關(guān)。首部字段 X-XSS-Protection 可指定的字段值如下:

  • 0:將 XSS 過濾設(shè)置成無效狀態(tài)
  • 1:將 XSS 過濾設(shè)置成有效狀態(tài)

6.3 DNT

DNT 屬于 HTTP 請求首部,其中 DNT 是 Do Not Track 的簡稱,意為拒絕個(gè)人信息被收集,是表示拒絕被精準(zhǔn)廣告追蹤的一種方法。首部字段 DNT 可指定的字段值如下:

  • 0:同意被追蹤
  • 1:拒絕被追蹤

6.4 P3P

P3P 屬于 HTTP 響應(yīng)首部,通過利用 P3P(The Platform for Privacy Preferences,在線隱私偏好平臺(tái))技術(shù),可以讓 Web 網(wǎng)站上的個(gè)人隱私變成一種僅供程序可理解的形式,以達(dá)到保護(hù)用戶隱私的目的。要進(jìn)行 P3P 的設(shè)定,需按以下操作步驟進(jìn)行:

  1. 創(chuàng)建 P3P 隱私
  2. 創(chuàng)建 P3P 隱私對照文件后,保存命名在 /w3c/p3p.xml
  3. 從 P3P 隱私中新建 Compact policies 后,輸出到 HTTP 響應(yīng)中

五、HTTP響應(yīng)狀態(tài)嗎

狀態(tài)碼的職責(zé)是當(dāng)客戶端向服務(wù)器端發(fā)送請求時(shí),描述返回的請求結(jié)果。借助狀態(tài)碼,用戶可以知道服務(wù)器端是正常處理了請求,還是出現(xiàn)了錯(cuò)誤。

1. 狀態(tài)碼類別

類別 原因
1XX nformational(信息性狀態(tài)碼) 接收的請求正在處理
2XX Success(成功狀態(tài)碼) 請求正常處理完畢
3XX Redirection(重定向狀態(tài)碼) 需要進(jìn)行附加操作以完成請求
4XX Client Error(客戶端錯(cuò)誤狀態(tài)碼) 服務(wù)器無法處理請求
5XX Server Error(服務(wù)器錯(cuò)誤狀態(tài)碼 服務(wù)器處理請求出錯(cuò)

2. 狀態(tài)具體描述

在 RFC2616 中定義了 40 種 HTTP 狀態(tài)碼,webDAV ( Web-based Distributed Authoring and Versioning,基于萬維網(wǎng)的分布式創(chuàng)作和版本控制)在 RFC4918 和 RFC5842 中,定義了一些特殊的狀態(tài)碼,在 RFC2518、RFC2817、RFC2295、RFC2774、RFC6585 中還額外定義了一些附加的 HTTP 狀態(tài)碼。總共有 60+ 種。具體鏈接可以見 HTTP狀態(tài)碼 (wikipedia)。雖然狀態(tài)種類繁多,但實(shí)際上經(jīng)常使用的大概有14種,我們簡單介紹一下這14種。

消息 描述
200 OK 請求成功(其后是對GET和POST請求的應(yīng)答文檔)
204 No Content 沒有新文檔。瀏覽器應(yīng)該繼續(xù)顯示原來的文檔
206 Partial Content 客戶發(fā)送了一個(gè)帶有Range頭的GET請求,服務(wù)器完成了它
301 Moved Permanently 所請求的頁面已經(jīng)轉(zhuǎn)移至新的url
302 Found 所請求的頁面已經(jīng)臨時(shí)轉(zhuǎn)移至新的url
303 See Other 所請求的頁面可在別的url下被找到
304 Not Modified 未按預(yù)期修改文檔
307 Temporary Redirect 被請求的頁面已經(jīng)臨時(shí)移至新的url
400 Bad Request 服務(wù)器未能理解請求
401 Unauthorized 被請求的頁面需要用戶名和密碼
403 Forbidden 對被請求頁面的訪問被禁止
404 Not Found 服務(wù)器無法找到被請求的頁面
500 Internal Server Error 請求未完成,服務(wù)器遇到不可預(yù)知的情況
503 Service Unavailable 請求未完成,服務(wù)器臨時(shí)過載或當(dāng)機(jī)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容