HTTP全知識(shí)體系建立

1. HTTP協(xié)議簡(jiǎn)介

HTTP全稱超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol),互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議所有的WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn)。

HTTP是應(yīng)用層網(wǎng)絡(luò)協(xié)議,在最上層,HTTP通常承載與TCP/IP協(xié)議之上,有時(shí)也承載于TLS或SSL協(xié)議層之上,這就成了我們常說(shuō)的HTTPS。

HTTP是一個(gè)應(yīng)用層協(xié)議,由請(qǐng)求和響應(yīng)構(gòu)成,是一個(gè)標(biāo)準(zhǔn)的客戶端服務(wù)器模型。HTTP是一個(gè)無(wú)狀態(tài)的協(xié)議。

HTTP默認(rèn)的端口號(hào)為80,HTTPS的端口號(hào)為443。

HTTP是基于TCP/IP通信協(xié)議來(lái)傳遞數(shù)據(jù)(HTML 文件, 圖片文件, 查詢結(jié)果等),簡(jiǎn)單的說(shuō),HTTP會(huì)把數(shù)據(jù)以流的形式傳給TCP層,TCP把數(shù)據(jù)切成一小段一小段的數(shù)據(jù)塊,有次序的傳遞給IP層(服務(wù)器IP地址就在此處),IP層可以按照順序一塊塊接收數(shù)據(jù)組合起來(lái)就到后端服務(wù)器了。

層級(jí)結(jié)構(gòu)清晰,轉(zhuǎn)載的

2. HTTP協(xié)議工作流程

1. 用戶在瀏覽器中輸入一個(gè)url,或者點(diǎn)擊一個(gè)網(wǎng)址或者用請(qǐng)求工具發(fā)送一次請(qǐng)求

2.?瀏覽器根據(jù)URL中的域名,通過(guò)DNS解析出目標(biāo)網(wǎng)頁(yè)的IP地址;然后將上面結(jié)合本機(jī)自己的信息,封裝成一個(gè)http請(qǐng)求數(shù)據(jù)包

? ?DNS服務(wù)器解析域名,先在本地緩存中查找域名對(duì)應(yīng)IP,沒(méi)找到之后再DNS服務(wù)器上找

3.?在HTTP開始工作前,客戶端首先會(huì)通過(guò)TCP/IP協(xié)議來(lái)和服務(wù)端建立鏈接(TCP三次握手)

4. 建立連接后,客戶機(jī)發(fā)送一個(gè)請(qǐng)求給服務(wù)器,請(qǐng)求方式的格式為:統(tǒng)一資源標(biāo)識(shí)符(URL)、協(xié)議版本號(hào),后邊是MIME信息包括請(qǐng)求修飾符、客戶機(jī)信息和內(nèi)容。

5.?服務(wù)器接到請(qǐng)求后,給予相應(yīng)的響應(yīng)信息,其格式為一個(gè)狀態(tài)行,包括信息的協(xié)議版本號(hào)、一個(gè)成功或錯(cuò)誤的代碼,后邊是MIME信息包括服務(wù)器信息、實(shí)體信息和內(nèi)容。

6.?一般情況下,一旦Web服務(wù)器向?yàn)g覽器發(fā)送了請(qǐng)求數(shù)據(jù),它就要關(guān)閉TCP連接,然后如果瀏覽器或者服務(wù)器在其頭信息加入了這行代碼:Connection:keep-alive,TCP連接在發(fā)送后將仍然保持打開狀態(tài),于是,瀏覽器可以繼續(xù)通過(guò)相同的連接發(fā)送請(qǐng)求。保持連接節(jié)省了為每個(gè)請(qǐng)求建立新連接所需的時(shí)間,還節(jié)約了網(wǎng)絡(luò)帶寬。

? ? 詳細(xì)過(guò)程:


過(guò)程詳細(xì),

3. HTTP 請(qǐng)求報(bào)文

由3大部分組成:請(qǐng)求行、請(qǐng)求頭、請(qǐng)求體,響應(yīng)同樣的3大部分。如下圖:

請(qǐng)求行 - 通用信息頭 - 請(qǐng)求頭 - 實(shí)體頭 - 報(bào)文主體

狀態(tài)行 - 通用信息頭 - 響應(yīng)頭 - 實(shí)體頭 - 報(bào)文主體


這張圖真漂亮,結(jié)構(gòu)清晰 crlf 為\r\n



以下示例:


request示例
POST請(qǐng)求
響應(yīng)體

? ??響應(yīng)行

? ? (HTTP/1.1)表明HTTP版本為1.1版本,狀態(tài)碼為200,狀態(tài)消息為(ok)

響應(yīng)頭

? ? Date:生成響應(yīng)的日期和時(shí)間;

? ? Content-Type:指定了MIME類型的HTML(text/html),編碼類型是ISO-8859-1

響應(yīng)體

響應(yīng)體解析

以上是請(qǐng)求和響應(yīng)的報(bào)文結(jié)構(gòu)。

HTTP另外一個(gè)重點(diǎn)在于請(qǐng)求頭的一些字段,和一些響應(yīng)嗎代表的狀態(tài)



1xx? 代表information 信息屬性狀態(tài)碼

2xx? 代表success ,具體如下

200:?( OK 客戶端發(fā)過(guò)來(lái)的數(shù)據(jù)被正常處理 )

204:? (?Not Content 正常響應(yīng),沒(méi)有實(shí)體? )

206: ( Partial Content 范圍請(qǐng)求,返回部分?jǐn)?shù)據(jù),響應(yīng)報(bào)文中由Content-Range指定實(shí)體內(nèi)容 )

3xx? 代表重定向,具體如下:

301: (Moved Permanently) 永久重定向

302: (Found) 臨時(shí)重定向,規(guī)范要求,方法名不變,但是都會(huì)改變

303: (See Other) 和302類似,但必須用GET方法

304: (Not Modified) 狀態(tài)未改變, 配合(If-Match、If-Modified-Since、If-None_Match、If-Range、If-Unmodified-Since)

307: (Temporary Redirect) 臨時(shí)重定向,不該改變請(qǐng)求方法

4xx: 代表客戶端錯(cuò)誤,具體如下:

400:(Bad Request) 請(qǐng)求報(bào)文語(yǔ)法錯(cuò)誤

401 :(unauthorized) 需要認(rèn)證

403:(Forbidden) 服務(wù)器拒絕訪問(wèn)對(duì)應(yīng)的資源

404:(Not Found) 服務(wù)器上無(wú)法找到資源

5xx:服務(wù)端錯(cuò)誤,具體:

500:(Internal Server Error)服務(wù)器故障

503:(Service Unavailable) 服務(wù)器處于超負(fù)載或正在停機(jī)維護(hù)



首部字段列表

1.? 通用首部字段:

Cache-Control : 控制緩存行為。

Connection : 連接的管理。

Date : 報(bào)文日期。

Pragma:報(bào)文指令。

Trailer:報(bào)文尾部的首部。

Trasfer-Encoding:制定報(bào)文主題的傳輸編碼方式。

Upgrade:升級(jí)為其他協(xié)議。

Via:代理服務(wù)信息。

Warning:錯(cuò)誤通知。

2.請(qǐng)求首部字段

Accept:用戶代理可以處理的媒體類型。

Accept-Charset:優(yōu)先的字符集。

Accept-Encoding:優(yōu)先的編碼。

Accept-Langulage:優(yōu)先的語(yǔ)言。

Authorization:Web認(rèn)證信息。

Expect:期待服務(wù)器的特定行為。

From:用戶的電子郵箱地址。

Host:請(qǐng)求資源所在的服務(wù)器。

if-Match:比較實(shí)體標(biāo)記。

if-Modified-Since:比較資源的更新時(shí)間

If-Range:資源未更新時(shí)發(fā)送實(shí)體Byte的范圍請(qǐng)求。

Max-Forwards:最大傳輸跳數(shù)。

Proxy-Authorization:代理服務(wù)器需要客戶端認(rèn)證。

Range:實(shí)體字節(jié)范圍請(qǐng)求。

Referer:請(qǐng)求中的URI的原始獲取方。

TE:傳輸編碼的優(yōu)先級(jí)。

User-Agent:HTTP客戶端程序的信息。

3 響應(yīng)首部字段

Accept-Ranges:是否接受字節(jié)范圍。

Age:資源的創(chuàng)建時(shí)間。

ETag:資源的匹配信息。

Location:客戶端重定向至指定的URI。

Proxy-Authenticate:代理服務(wù)器對(duì)客戶端的認(rèn)證信息。

Retry-After:再次發(fā)送請(qǐng)求的時(shí)機(jī)。

Server:服務(wù)器的信息。

Vary:代理服務(wù)器緩存的管理信息。

www-Authenticate:服務(wù)器對(duì)客戶端的認(rèn)證。

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

Allow:資源可支持的HTTP方法。

Content-Encoding : 實(shí)體的編碼方式。

Content-Language : 實(shí)體的自然語(yǔ)言。

Content-length : 實(shí)體的內(nèi)容大小。

Content-location: 替代對(duì)應(yīng)資源的url。

Content-MD5 : 實(shí)體的報(bào)文摘要。

Conten-range : 實(shí)體主體的位置范圍。

Content-Type : 實(shí)主體的媒體類型。

Expires : 實(shí)體過(guò)期時(shí)間。

Last-Modified :資源的最后修改時(shí)間。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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