HTTP協(xié)議

HTTP(超文本傳輸協(xié)議)是一個(gè)基于請求與響應(yīng)模式的、無狀態(tài)的、應(yīng)用層的協(xié)議,?;赥CP的連接方式,HTTP1.1版本中給出一種持續(xù)連接的機(jī)制,絕大多數(shù)的Web開發(fā),都是構(gòu)建在HTTP協(xié)議之上的Web應(yīng)用。

一:HTTP請求(Request)的結(jié)構(gòu)

http請求由三部分組成,分別是:請求行、消息報(bào)頭、請求正文

請求行:

包括三個(gè)部分,請求方法(POST、GET、PUT 等)、URL、http版本號。三者之間用空格分開。最后有一個(gè)回車換行標(biāo)志(CRLF)。

請求頭部:

由若干個(gè)報(bào)頭組成。每個(gè)報(bào)頭的結(jié)構(gòu)為:名字+“:”+空格+值。名字是大小寫無關(guān)的。這些報(bào)頭用來設(shè)置http請求的一些參數(shù),例如host表示被請求資源的主機(jī)和端口號。host報(bào)頭在請求時(shí)是必備的。

空行:

請求頭部后面的空行是必須的,即使第四部分的請求數(shù)據(jù)為空,也必須有空行。 瀏覽器發(fā)送了一空白行來通知服務(wù)器,它已經(jīng)結(jié)束了該頭信息的發(fā)送

數(shù)據(jù)體:

只在POST請求里用到,表示要上傳的數(shù)據(jù)。數(shù)據(jù)體和頭部之間有一行空行。

POST請求例子:

第一部分:請求行,第一行表明了是post請求,以及http1.1版本。

第二部分:請求頭部,第二行至第六行。

第三部分:空行,第七行的空行。

第四部分:請求數(shù)據(jù),第八行。

二:HTTP響應(yīng)報(bào)文(Response)的結(jié)構(gòu)

服務(wù)器接收并處理客戶端發(fā)過來的請求后會返回一個(gè)HTTP的響應(yīng)消息;http響應(yīng)報(bào)文:狀態(tài)行、響應(yīng)頭部、響應(yīng)正文。

第一部分:狀態(tài)行,由HTTP協(xié)議版本號, 狀態(tài)碼(200), 狀態(tài)消息(OK) 三部分組成。

第二部分:消息報(bào)頭,用來說明客戶端要使用的一些附加信息

第二行和第三行為消息報(bào)頭,

Date:生成響應(yīng)的日期和時(shí)間;Content-Type:指定了MIME類型的HTML(text/html),編碼類型是UTF-8

第三部分:空行,消息報(bào)頭后面的空行是必須的

第四部分:響應(yīng)正文,服務(wù)器返回給客戶端的文本信息??招泻竺娴膆tml部分為響應(yīng)正文。

三:常見的HTTP狀態(tài)碼

1xx:指示信息--表示請求已接收,繼續(xù)處理

2xx:成功--表示請求已被成功接收、理解、接受

3xx:重定向--要完成請求必須進(jìn)行更進(jìn)一步的操作

4xx:客戶端錯(cuò)誤--請求有語法錯(cuò)誤或請求無法實(shí)現(xiàn)

5xx:服務(wù)器端錯(cuò)誤--服務(wù)器未能實(shí)現(xiàn)合法的請求

常見狀態(tài)碼描述:

100 Continue 繼續(xù),一般在發(fā)送post請求時(shí),已發(fā)送了http header之后服務(wù)端將返回此信息,表示確認(rèn),之后發(fā)送具體參數(shù)信息

200 OK 正常返回信息

201 Created 請求成功并且服務(wù)器創(chuàng)建了新的資源

202 Accepted 服務(wù)器已接受請求,但尚未處理

301 Moved Permanently 請求的網(wǎng)頁已永久移動(dòng)到新位置

302 Found 臨時(shí)性重定向

303 See Other 臨時(shí)性重定向,且總是使用 GET 請求新的 URI

304 Not Modified 自從上次請求后,請求的網(wǎng)頁未修改過

400 Bad Request 服務(wù)器無法理解請求的格式,客戶端不應(yīng)當(dāng)嘗試再次使用相同的內(nèi)容發(fā)起請求

401 Unauthorized 請求未授權(quán)

403 Forbidden 禁止訪問

404 Not Found 找不到如何與 URI 相匹配的資源

500 Internal Server Error 最常見的服務(wù)器端錯(cuò)誤

503 Service Unavailable 服務(wù)器端暫時(shí)無法處理請求(可能是過載或維護(hù))

四:常見的http請求方法

HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

GET:?用于請求訪問已經(jīng)被URI(統(tǒng)一資源標(biāo)識符)識別的資源,可以通過URL傳參給服務(wù)器。

POST:用于傳輸信息給服務(wù)器,主要功能與GET方法類似,但一般推薦使用POST方式。

PUT:?傳輸文件,報(bào)文主體中包含文件內(nèi)容,保存到對應(yīng)URI位置。

HEAD:?獲得報(bào)文首部,與GET方法類似,只是不返回報(bào)文主體,一般用于驗(yàn)證URI是否有效。

DELETE:刪除文件,與PUT方法相反,刪除對應(yīng)URI位置的文件。

OPTIONS:查詢相應(yīng)URI支持的HTTP方法。

GET方法與POST方法的區(qū)別:

1、get重點(diǎn)在從服務(wù)器上獲取資源,post重點(diǎn)在向服務(wù)器發(fā)送數(shù)據(jù);

2、get傳輸數(shù)據(jù)是通過URL請求,以field(字段)= value的形式,置于URL后,并用"?"連接,多個(gè)請求數(shù)據(jù)間用"&"連接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,這個(gè)過程用戶是可見的;post傳輸數(shù)據(jù)通過Http的post機(jī)制,將字段與對應(yīng)值封存在請求實(shí)體中發(fā)送給服務(wù)器,這個(gè)過程對用戶是不可見的;

3、Get傳輸?shù)臄?shù)據(jù)量小,因?yàn)槭躑RL長度限制,但效率較高;Post可以傳輸大量數(shù)據(jù),所以上傳文件時(shí)只能用Post方式

4、get是不安全的,因?yàn)閁RL是可見的,可能會泄露私密信息,如密碼等;post較get安全性較高

5、get方式只能支持ASCII字符,向服務(wù)器傳的中文字符可能會亂碼;post支持標(biāo)準(zhǔn)字符集,可以正確傳遞中文字符。

五:瀏覽器輸入www.baidu.com會發(fā)生什么?主要過程:網(wǎng)絡(luò)通信和頁面渲染

當(dāng)我們在瀏覽器上敲入一個(gè)url時(shí), 瀏覽器首先接收該url的域名并分析是否符合URL標(biāo)準(zhǔn),不符合的話,會交給搜索引擎

如果是正確的URL,那么瀏覽器會檢索該主機(jī)的HOST列表,如果有該域名的IP的話,就萬事大吉。否則發(fā)送域名給最近的DNS進(jìn)行解析。DNS接收該域名后,先請求本地服務(wù)器緩存,如果本地服務(wù)器也沒有該域名的IP的話,那么由本地服務(wù)器依次向上請求,根服務(wù)器,com服務(wù)器,百度服務(wù)器,直到找到baidu.com的IP地址

DNS將域名對應(yīng)的IP地址返回給瀏覽器

應(yīng)用層瀏覽器客戶端向IP地址所對應(yīng)的的服務(wù)器發(fā)送請求數(shù)據(jù)(請求行為:GET http://www.baidu.com/HTTP/1.1)

傳輸層TCP傳輸請求報(bào)文,“三次握手”建立TCP連接,一般TCP連接的端口號是80

網(wǎng)絡(luò)層IP協(xié)議查詢MAC地址,IP協(xié)議的作用是把TCP分割好的各種數(shù)據(jù)包傳送給接收方,而要保證報(bào)文確實(shí)能傳到接收方還需要接收方的MAC地址,也就是物理地址。ARP協(xié)議可以將IP地址解析成對應(yīng)的MAC地址

在找到對方的MAC地址后,就將數(shù)據(jù)發(fā)送到數(shù)據(jù)鏈路層傳輸。這時(shí),客戶端發(fā)送請求的階段結(jié)束

接收端的服務(wù)器在鏈路層接收到數(shù)據(jù)包,再層層向上直到應(yīng)用層。這過程中包括在傳輸層通過TCP協(xié)議將分段的數(shù)據(jù)包重新組成原來的HTTP請求報(bào)文。

服務(wù)器響應(yīng)請求,發(fā)回網(wǎng)頁內(nèi)容(響應(yīng)狀態(tài)行為:HTTP/1.1 200 OK)

客戶端瀏覽器獲取網(wǎng)頁內(nèi)容,解析HTML并進(jìn)行渲染來顯示在瀏覽器上。

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

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

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