HTTP協(xié)議

1.HTTP主要特點(diǎn)

  • 簡(jiǎn)單快速
  • 靈活
  • 無(wú)連接
  • 無(wú)狀態(tài)

簡(jiǎn)單:每個(gè)資源(比如圖片、頁(yè)面)都通過(guò) url 來(lái)定位。這都是固定的拥坛,在http協(xié)議中狭园,處理起來(lái)也比較簡(jiǎn)單读处,想訪問(wèn)什么資源,直接輸入url即可妙啃。
靈活:http協(xié)議的頭部有一個(gè)數(shù)據(jù)類(lèi)型档泽,通過(guò)http協(xié)議,就可以完成不同數(shù)據(jù)類(lèi)型的傳輸揖赴。
無(wú)連接:連接一次馆匿,就會(huì)斷開(kāi),不會(huì)繼續(xù)保持連接燥滑。
無(wú)狀態(tài):客戶端和服務(wù)器端是兩種身份渐北。第一次請(qǐng)求結(jié)束后,就斷開(kāi)了铭拧,第二次請(qǐng)求時(shí)赃蛛,服務(wù)器端并沒(méi)有記住之前的狀態(tài),也就是說(shuō)搀菩,服務(wù)器端無(wú)法區(qū)分客戶端是否為同一個(gè)人呕臂、同一個(gè)身份。有的時(shí)候肪跋,我們?cè)L問(wèn)網(wǎng)站時(shí)歧蒋,網(wǎng)站能記住我們的賬號(hào),這個(gè)是通過(guò)其他的手段(比如 session)做到的,并不是http協(xié)議能做到的谜洽。

2.HTTP工作過(guò)程

一次HTTP操作稱為一個(gè)事務(wù)萝映,其工作過(guò)程大概如下:

  • 用戶在瀏覽器中鍵入需要訪問(wèn)網(wǎng)頁(yè)的URL或者點(diǎn)擊某個(gè)網(wǎng)頁(yè)中鏈接;
    瀏覽器根據(jù)URL中的域名阐虚,通過(guò)DNS解析出目標(biāo)網(wǎng)頁(yè)的IP地址序臂;
  • 瀏覽器請(qǐng)求這個(gè)頁(yè)面:http://hackr.ip/index.html。在這一步实束,需要域名系統(tǒng)DNS解析域名hackr.ip,得主機(jī)的IP地址 20X.189.105.112奥秆。然后將上面結(jié)合本機(jī)自己的信息,封裝成一個(gè)http請(qǐng)求數(shù)據(jù)包復(fù)制代碼磕洪。
  • 在HTTP開(kāi)始工作前吭练,客戶端首先會(huì)通過(guò)TCP/IP協(xié)議來(lái)和服務(wù)端建立鏈接(TCP三次握手)
  • 建立連接后,客戶機(jī)發(fā)送一個(gè)請(qǐng)求給服務(wù)器析显,請(qǐng)求方式的格式為:統(tǒng)一資源標(biāo)識(shí)符(URL)鲫咽、協(xié)議版本號(hào),后邊是MIME信息包括請(qǐng)求修飾符谷异、客戶機(jī)信息和可內(nèi)容分尸。
  • 服務(wù)器接到請(qǐng)求后,給予相應(yīng)的響應(yīng)信息歹嘹,其格式為一個(gè)狀態(tài)行箩绍,包括信息的協(xié)議版本號(hào)、一個(gè)成功或錯(cuò)誤的代碼尺上,后邊是MIME信息包括服務(wù)器信息材蛛、實(shí)體信息和可能的內(nèi)容。
  • 一旦Web服務(wù)器向?yàn)g覽器發(fā)送了請(qǐng)求數(shù)據(jù)怎抛,它就要關(guān)閉TCP連接卑吭,然后如果瀏覽器或者服務(wù)器在其頭信息加入了這行代碼:Connection:keep-alive,TCP連接在發(fā)送后將仍然保持打開(kāi)狀態(tài)马绝,于是豆赏,瀏覽器可以繼續(xù)通過(guò)相同的連接發(fā)送請(qǐng)求。保持連接節(jié)省了為每個(gè)請(qǐng)求建立新連接所需的時(shí)間富稻,還節(jié)約了網(wǎng)絡(luò)帶寬掷邦。

3.HTTP報(bào)文

http報(bào)文包括:請(qǐng)求報(bào)文和響應(yīng)報(bào)文。


image.png
請(qǐng)求報(bào)文
  • 請(qǐng)求行:包括請(qǐng)求方法椭赋、請(qǐng)求的url抚岗、http協(xié)議及版本。
  • 請(qǐng)求頭:一大堆的鍵值對(duì)哪怔。
  • 空行指的是:當(dāng)服務(wù)器在解析請(qǐng)求頭的時(shí)候宣蔚,如果遇到了空行廷痘,則表明,后面的內(nèi)容是請(qǐng)求體件已。
  • 請(qǐng)求體:數(shù)據(jù)部分。


    image.png
響應(yīng)報(bào)文
  • 狀態(tài)行:http協(xié)議及版本元暴、狀態(tài)碼及狀態(tài)描述篷扩。
  • 響應(yīng)頭
  • 空行
  • 響應(yīng)體


    image.png
常見(jiàn)的請(qǐng)求頭/響應(yīng)頭:

https://itbilu.com/other/relate/EJ3fKUwUx.html

4.HTTP方法

  • GET:獲取資源
  • POST:傳輸資源
  • PUT:更新資源
  • DELETE:刪除資源
  • HEAD:獲得報(bào)文首部
get與post區(qū)別:

1、瀏覽器在回退時(shí)茉盏,get不會(huì)重新請(qǐng)求鉴未,但是post會(huì)重新請(qǐng)求○蹋【重要】
2铜秆、get請(qǐng)求會(huì)被瀏覽器主動(dòng)緩存,而post不會(huì)讶迁×耄【重要】
3、get請(qǐng)求的參數(shù)巍糯,會(huì)報(bào)保留在瀏覽器的歷史記錄里啸驯,而post不會(huì)。做業(yè)務(wù)時(shí)要注意祟峦。為了防止CSRF攻擊罚斗,很多公司把get統(tǒng)一改成了post。
4宅楞、get請(qǐng)求在url中傳遞的參數(shù)有大小限制针姿,基本是2kb,不同的瀏覽器略有不同厌衙。而post沒(méi)有注意距淫。
5、get的參數(shù)是直接暴露在url上的迅箩,相對(duì)不安全溉愁。而post是放在請(qǐng)求體中的。

5.HTTP狀態(tài)碼

1開(kāi)頭

1xx(臨時(shí)響應(yīng))表示臨時(shí)響應(yīng)并需要請(qǐng)求者繼續(xù)執(zhí)行操作的狀態(tài)代碼饲趋。

  • 100 (繼續(xù)) 請(qǐng)求者應(yīng)當(dāng)繼續(xù)提出請(qǐng)求拐揭。 服務(wù)器返回此代碼表示已收到請(qǐng)求的第一部分,正在等待其余部分奕塑。
  • 101 (切換協(xié)議) 請(qǐng)求者已要求服務(wù)器切換協(xié)議堂污,服務(wù)器已確認(rèn)并準(zhǔn)備切換。
2開(kāi)頭

2xx (成功)表示成功處理了請(qǐng)求的狀態(tài)代碼龄砰。

  • 200 (成功) 服務(wù)器已成功處理了請(qǐng)求盟猖。 通常讨衣,這表示服務(wù)器提供了請(qǐng)求的網(wǎng)頁(yè)。
  • 201 (已創(chuàng)建) 請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源式镐。
  • 202 (已接受) 服務(wù)器已接受請(qǐng)求反镇,但尚未處理。
  • 203 (非授權(quán)信息) 服務(wù)器已成功處理了請(qǐng)求娘汞,但返回的信息可能來(lái)自另一來(lái)源歹茶。
  • 204 (無(wú)內(nèi)容) 服務(wù)器成功處理了請(qǐng)求,但沒(méi)有返回任何內(nèi)容你弦。
  • 205 (重置內(nèi)容) 服務(wù)器成功處理了請(qǐng)求惊豺,但沒(méi)有返回任何內(nèi)容。
  • 206 (部分內(nèi)容) 服務(wù)器成功處理了部分 GET 請(qǐng)求禽作。
3開(kāi)頭

3xx (重定向) 表示要完成請(qǐng)求尸昧,需要進(jìn)一步操作。 通常旷偿,這些狀態(tài)代碼用來(lái)重定向烹俗。

  • 300 (多種選擇) 針對(duì)請(qǐng)求,服務(wù)器可執(zhí)行多種操作狸捅。 服務(wù)器可根據(jù)請(qǐng)求者 (user agent) 選擇一項(xiàng)操作衷蜓,或提供操作列表供請(qǐng)求者選擇。
  • 301 (永久移動(dòng)) 請(qǐng)求的網(wǎng)頁(yè)已永久移動(dòng)到新位置尘喝。 服務(wù)器返回此響應(yīng)(對(duì) GET 或 HEAD 請(qǐng)求的響應(yīng))時(shí)磁浇,會(huì)自動(dòng)將請(qǐng)求者轉(zhuǎn)到新位置。
  • 302 (臨時(shí)移動(dòng)) 服務(wù)器目前從不同位置的網(wǎng)頁(yè)響應(yīng)請(qǐng)求朽褪,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來(lái)進(jìn)行以后的請(qǐng)求置吓。
  • 303 (查看其他位置) 請(qǐng)求者應(yīng)當(dāng)對(duì)不同的位置使用單獨(dú)的 GET 請(qǐng)求來(lái)檢索響應(yīng)時(shí),服務(wù)器返回此代碼缔赠。
  • 304 (未修改) 自從上次請(qǐng)求后衍锚,請(qǐng)求的網(wǎng)頁(yè)未修改過(guò)。 服務(wù)器返回此響應(yīng)時(shí)嗤堰,不會(huì)返回網(wǎng)頁(yè)內(nèi)容戴质。
  • 305 (使用代理) 請(qǐng)求者只能使用代理訪問(wèn)請(qǐng)求的網(wǎng)頁(yè)。 如果服務(wù)器返回此響應(yīng)踢匣,還表示請(qǐng)求者應(yīng)使用代理告匠。
  • 307 (臨時(shí)重定向) 服務(wù)器目前從不同位置的網(wǎng)頁(yè)響應(yīng)請(qǐng)求,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來(lái)進(jìn)行以后的請(qǐng)求离唬。
4開(kāi)頭

4xx(請(qǐng)求錯(cuò)誤) 這些狀態(tài)代碼表示請(qǐng)求可能出錯(cuò)后专,妨礙了服務(wù)器的處理。

  • 400 (錯(cuò)誤請(qǐng)求) 服務(wù)器不理解請(qǐng)求的語(yǔ)法输莺。
  • 401 (未授權(quán)) 請(qǐng)求要求身份驗(yàn)證戚哎。 對(duì)于需要登錄的網(wǎng)頁(yè)裸诽,服務(wù)器可能返回此響應(yīng)。
  • 403 (禁止) 服務(wù)器拒絕請(qǐng)求型凳。
  • 404 (未找到) 服務(wù)器找不到請(qǐng)求的網(wǎng)頁(yè)丈冬。
  • 405 (方法禁用) 禁用請(qǐng)求中指定的方法。
  • 406 (不接受) 無(wú)法使用請(qǐng)求的內(nèi)容特性響應(yīng)請(qǐng)求的網(wǎng)頁(yè)甘畅。
  • 407 (需要代理授權(quán)) 此狀態(tài)代碼與 401(未授權(quán))類(lèi)似殷蛇,但指定請(qǐng)求者應(yīng)當(dāng)授權(quán)使用代理。
  • 408 (請(qǐng)求超時(shí)) 服務(wù)器等候請(qǐng)求時(shí)發(fā)生超時(shí)橄浓。
  • 409 (沖突) 服務(wù)器在完成請(qǐng)求時(shí)發(fā)生沖突。 服務(wù)器必須在響應(yīng)中包含有關(guān)沖突的信息亮航。
  • 410 (已刪除) 如果請(qǐng)求的資源已永久刪除荸实,服務(wù)器就會(huì)返回此響應(yīng)。
  • 411 (需要有效長(zhǎng)度) 服務(wù)器不接受不含有效內(nèi)容長(zhǎng)度標(biāo)頭字段的請(qǐng)求缴淋。
  • 412 (未滿足前提條件) 服務(wù)器未滿足請(qǐng)求者在請(qǐng)求中設(shè)置的其中一個(gè)前提條件准给。
  • 413 (請(qǐng)求實(shí)體過(guò)大) 服務(wù)器無(wú)法處理請(qǐng)求,因?yàn)檎?qǐng)求實(shí)體過(guò)大重抖,超出服務(wù)器的處理能力露氮。
  • 414 (請(qǐng)求的 URI 過(guò)長(zhǎng)) 請(qǐng)求的 URI(通常為網(wǎng)址)過(guò)長(zhǎng),服務(wù)器無(wú)法處理钟沛。
  • 415 (不支持的媒體類(lèi)型) 請(qǐng)求的格式不受請(qǐng)求頁(yè)面的支持畔规。
  • 416 (請(qǐng)求范圍不符合要求) 如果頁(yè)面無(wú)法提供請(qǐng)求的范圍,則服務(wù)器會(huì)返回此狀態(tài)代碼恨统。
  • 417 (未滿足期望值) 服務(wù)器未滿足"期望"請(qǐng)求標(biāo)頭字段的要求叁扫。
5開(kāi)頭

5xx(服務(wù)器錯(cuò)誤)這些狀態(tài)代碼表示服務(wù)器在嘗試處理請(qǐng)求時(shí)發(fā)生內(nèi)部錯(cuò)誤。 這些錯(cuò)誤可能是服務(wù)器本身的錯(cuò)誤畜埋,而不是請(qǐng)求出錯(cuò)莫绣。

  • 500 (服務(wù)器內(nèi)部錯(cuò)誤) 服務(wù)器遇到錯(cuò)誤,無(wú)法完成請(qǐng)求悠鞍。
  • 501 (尚未實(shí)施) 服務(wù)器不具備完成請(qǐng)求的功能对室。 例如,服務(wù)器無(wú)法識(shí)別請(qǐng)求方法時(shí)可能會(huì)返回此代碼咖祭。
  • 502 (錯(cuò)誤網(wǎng)關(guān)) 服務(wù)器作為網(wǎng)關(guān)或代理掩宜,從上游服務(wù)器收到無(wú)效響應(yīng)。
  • 503 (服務(wù)不可用) 服務(wù)器目前無(wú)法使用(由于超載或停機(jī)維護(hù))心肪。 通常锭亏,這只是暫時(shí)狀態(tài)。
  • 504 (網(wǎng)關(guān)超時(shí)) 服務(wù)器作為網(wǎng)關(guān)或代理硬鞍,但是沒(méi)有及時(shí)從上游服務(wù)器收到請(qǐng)求慧瘤。
  • 505 (HTTP 版本不受支持) 服務(wù)器不支持請(qǐng)求中所用的 HTTP 協(xié)議版本戴已。

6.http2.0

HTTP協(xié)議的第四個(gè)版本是HTTP/2.0,相對(duì)于HTTP/1.1新增了以下內(nèi)容:

1.二進(jìn)制分幀
HTTP 2.0 的所有幀都采用二進(jìn)制編碼

  • 幀:客戶端與服務(wù)器通過(guò)交換幀來(lái)通信锅减,幀是基于這個(gè)新協(xié)議通信的最小單位糖儡。
  • 消息:是指邏輯上的 HTTP 消息,比如請(qǐng)求怔匣、響應(yīng)等握联,由一或多個(gè)幀組成。
  • 流:流是連接中的一個(gè)虛擬信道每瞒,可以承載雙向的消息金闽;每個(gè)流都有一個(gè)唯一的整數(shù)標(biāo)識(shí)符(1、2 … N)剿骨;

2.多路復(fù)用
多路復(fù)用允許同時(shí)通過(guò)單一的HTTP/2.0 連接發(fā)起多重的請(qǐng)求-響應(yīng)消息代芜。有了新的分幀機(jī)制后,HTTP/2.0不再依賴多個(gè)TCP 連接去處理更多并發(fā)的請(qǐng)求浓利。每個(gè)數(shù)據(jù)流都拆分成很多互不依賴的幀挤庇,而這些幀可以交錯(cuò)(亂序發(fā)送),還可以分優(yōu)先級(jí)贷掖。最后再在另一端根據(jù)每個(gè)幀首部的流標(biāo)識(shí)符把它們重新組合起來(lái)嫡秕。HTTP 2.0 連接都是持久化的,而且客戶端與服務(wù)器之間也只需要一個(gè)連接(每個(gè)域名一個(gè)連接)即可苹威。

3.頭部壓縮
HTTP/1.1 的首部帶有大量信息昆咽,而且每次都要重復(fù)發(fā)送。HTTP/2.0 要求通訊雙方各自緩存一份首部字段表牙甫,從而避免了重復(fù)傳輸潮改。

4.請(qǐng)求優(yōu)先級(jí)
瀏覽器可以在發(fā)現(xiàn)資源時(shí)立即分派請(qǐng)求,指定每個(gè)流的優(yōu)先級(jí)腹暖,讓服務(wù)器決定最優(yōu)的響應(yīng)次序汇在。這樣請(qǐng)求就不必排隊(duì)了,既節(jié)省了時(shí)間脏答,也最大限度地利用了每個(gè)連接糕殉。

5.服務(wù)端推送
服務(wù)端推送能把客戶端所需要的資源伴隨著index.html一起發(fā)送到客戶端,省去了客戶端重復(fù)請(qǐng)求的步驟殖告。正因?yàn)闆](méi)有發(fā)起請(qǐng)求阿蝶,建立連接等操作,所以靜態(tài)資源通過(guò)服務(wù)端推送的方式可以極大地提升速度黄绩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末羡洁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子爽丹,更是在濱河造成了極大的恐慌筑煮,老刑警劉巖辛蚊,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異真仲,居然都是意外死亡袋马,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)秸应,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)虑凛,“玉大人,你說(shuō)我怎么就攤上這事软啼∩5” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵祸挪,是天一觀的道長(zhǎng)霉囚。 經(jīng)常有香客問(wèn)我,道長(zhǎng)匕积,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任榜跌,我火速辦了婚禮闪唆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钓葫。我一直安慰自己悄蕾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布础浮。 她就那樣靜靜地躺著帆调,像睡著了一般。 火紅的嫁衣襯著肌膚如雪豆同。 梳的紋絲不亂的頭發(fā)上番刊,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音影锈,去河邊找鬼芹务。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鸭廷,可吹牛的內(nèi)容都是我干的枣抱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼辆床,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼佳晶!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起讼载,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤轿秧,失蹤者是張志新(化名)和其女友劉穎中跌,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體淤刃,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晒他,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逸贾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陨仅。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖铝侵,靈堂內(nèi)的尸體忽然破棺而出灼伤,到底是詐尸還是另有隱情,我是刑警寧澤咪鲜,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布狐赡,位于F島的核電站,受9級(jí)特大地震影響疟丙,放射性物質(zhì)發(fā)生泄漏颖侄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一享郊、第九天 我趴在偏房一處隱蔽的房頂上張望览祖。 院中可真熱鬧,春花似錦炊琉、人聲如沸展蒂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锰悼。三九已至,卻和暖如春团赏,著一層夾襖步出監(jiān)牢的瞬間箕般,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工舔清, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隘世,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓鸠踪,卻偏偏與公主長(zhǎng)得像丙者,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子营密,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360