關(guān)于Http協(xié)議属瓣,你必須要知道的

引言

HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫(xiě),是用于從萬(wàn)維網(wǎng)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議笑撞。HTTP 是基于 TCP/IP 協(xié)議通信協(xié)議來(lái)傳遞數(shù)據(jù)(HTML 文件, 圖片文件, 查詢(xún)結(jié)果等)工扎。它不涉及數(shù)據(jù)包(packet)傳輸舱痘,主要規(guī)定了客戶(hù)端和服務(wù)器之間的通信格式变骡,默認(rèn)使用80端口。

一芭逝、Http的特點(diǎn)

1.簡(jiǎn)單快速:客戶(hù)向服務(wù)器請(qǐng)求服務(wù)時(shí)塌碌,只需傳送請(qǐng)求方法和路徑。請(qǐng)求方法常用的有GET旬盯、HEAD台妆、PUT、DELETE胖翰、POST接剩。每種方法規(guī)定了客戶(hù)與服務(wù)器聯(lián)系的類(lèi)型不同。由于HTTP協(xié)議簡(jiǎn)單泡态,使得HTTP服務(wù)器的程序規(guī)模小搂漠,因而通信速度很快澈蝙。

2.靈活:HTTP允許傳輸任意類(lèi)型的數(shù)據(jù)對(duì)象摧冀。

3.無(wú)連接:無(wú)連接的含義是限制每次連接只處理一個(gè)請(qǐng)求危纫。服務(wù)器處理完客戶(hù)的請(qǐng)求溢吻,并收到客戶(hù)的應(yīng)答后,即斷開(kāi)連接怔毛。采用這種方式可以節(jié)省傳輸時(shí)間员萍。

4.無(wú)狀態(tài)HTTP協(xié)議是無(wú)狀態(tài)的,HTTP 協(xié)議自身不對(duì)請(qǐng)求和響應(yīng)之間的通信狀態(tài)進(jìn)行保存拣度。任何兩次請(qǐng)求之間都沒(méi)有依賴(lài)關(guān)系碎绎。直觀地說(shuō),就是每個(gè)請(qǐng)求都是獨(dú)立的抗果,與前面的請(qǐng)求和后面的請(qǐng)求都是沒(méi)有直接聯(lián)系的筋帖。協(xié)議本身并不保留之前一切的請(qǐng)求或 響應(yīng)報(bào)文的信息。這是為了更快地處理大量事務(wù)冤馏,確保協(xié)議的可伸縮性日麸,而特意把 HTTP 協(xié)議設(shè)計(jì)成如此簡(jiǎn)單的。

二逮光、Http報(bào)文

Http報(bào)文包括請(qǐng)求報(bào)文和響應(yīng)報(bào)文兩大部分代箭,其中請(qǐng)求報(bào)文由請(qǐng)求行(request line)、請(qǐng)求頭(header)涕刚、空行和請(qǐng)求體四個(gè)部分組成嗡综。而響應(yīng)報(bào)文由狀態(tài)行、響應(yīng)頭部杜漠、空行和響應(yīng)體四個(gè)部分組成极景。接下來(lái)我們?cè)敿?xì)介紹下請(qǐng)求報(bào)文的各個(gè)部分及其作用。

1.請(qǐng)求行碑幅,用來(lái)說(shuō)明請(qǐng)求類(lèi)型,要訪問(wèn)的資源以及所使用的HTTP版本戴陡。

POST?/chapter17/user.html?HTTP/1.1

以上代碼中“POST ”代表請(qǐng)求方法,“/chapter17/user.html”表示URI沟涨,“HTTP/1.1”代表協(xié)議和協(xié)議的版本⌒襞現(xiàn)在比較流行的是Http1.1版本

2.請(qǐng)求頭由關(guān)鍵字/值對(duì)組成,每行一對(duì)裹赴,關(guān)鍵字和值用英文冒號(hào)“:”分隔喜庞。

請(qǐng)求頭部通知服務(wù)器有關(guān)于客戶(hù)端請(qǐng)求的信息。它包含許多有關(guān)的客戶(hù)端環(huán)境和請(qǐng)求正文的有用信息棋返。其中比如:

**Host延都,表示主機(jī)名,虛擬主機(jī)睛竣;

Connection,HTTP/1.1增加的晰房,使用keepalive,即持久連接,一個(gè)連接可以發(fā)多個(gè)請(qǐng)求殊者;

User-Agent与境,請(qǐng)求發(fā)出者,兼容性以及定制化需求猖吴。**

3.最后一個(gè)請(qǐng)求頭之后是一個(gè)空行摔刁,這個(gè)行非常重要,它表示請(qǐng)求頭已經(jīng)結(jié)束海蔽,接下來(lái)的是請(qǐng)求正文共屈。

4.請(qǐng)求體,可以承載多個(gè)請(qǐng)求參數(shù)的數(shù)據(jù)

name=tom&password=1234&realName=tomson

上面代碼党窜,承載著name拗引、password、realName三個(gè)請(qǐng)求參數(shù)刑然。

三寺擂、HTTP請(qǐng)求方法

GET 請(qǐng)求指定的頁(yè)面信息暇务,并返回實(shí)體主體泼掠。

HEAD 類(lèi)似于get請(qǐng)求,只不過(guò)返回的響應(yīng)中沒(méi)有具體的內(nèi)容垦细,用于獲取報(bào)頭

POST 向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(例如提交表單或者上傳文件)择镇。數(shù)據(jù)被包含在請(qǐng)求體中。

PUT 從客戶(hù)端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容括改。

DELETE 請(qǐng)求服務(wù)器刪除指定的頁(yè)面腻豌。

四、GET與POST區(qū)別

GET在瀏覽器回退時(shí)是無(wú)害的嘱能,而POST會(huì)再次提交請(qǐng)求

GET請(qǐng)求會(huì)被瀏覽器主動(dòng)緩存吝梅,而POST不會(huì),除非手動(dòng)設(shè)置

GET請(qǐng)求參數(shù)會(huì)被完整保留在瀏覽器歷史記錄里惹骂,而POST中的參數(shù)不會(huì)被保留

GET請(qǐng)求在URL中傳送的參數(shù)是有長(zhǎng)度限制的苏携,而POST沒(méi)有限制

GET參數(shù)通過(guò)URL傳遞,POST放在Request body中

五对粪、Http狀態(tài)碼

狀態(tài)代碼有三位數(shù)字組成右冻,第一個(gè)數(shù)字定義了響應(yīng)的類(lèi)別,共分五種類(lèi)別:

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

2xx:成功--表示請(qǐng)求已被成功接收纱扭、理解、接受

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

4xx:客戶(hù)端錯(cuò)誤--請(qǐng)求有語(yǔ)法錯(cuò)誤或請(qǐng)求無(wú)法實(shí)現(xiàn)

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

比如我們平時(shí)常見(jiàn)兩種出錯(cuò)的狀態(tài)碼:

403?Forbidden?????????????????//對(duì)被請(qǐng)求頁(yè)面的訪問(wèn)被禁止

404?Not?Found?????????????????//請(qǐng)求資源不存在儡遮,比如:輸入了錯(cuò)誤的URL

六乳蛾、持久連接

1.為什么需要持久連接

HTTP協(xié)議的初始版本中,每進(jìn)行一次HTTP通信就要斷開(kāi)一次TCP連接。以當(dāng)年的通信情況來(lái)說(shuō)肃叶,因?yàn)槎际切┤萘亢苄〉奈谋緜鬏斠涫祝约词惯@樣也沒(méi)有多大問(wèn)題”换罚可隨著 HTTP 的 普及糙及,文檔中包含大量圖片的情況多了起來(lái)。比如筛欢,使用瀏覽器瀏覽一個(gè)包含多張圖片的 HTML 頁(yè)面時(shí)浸锨,在發(fā)送請(qǐng)求訪問(wèn) HTML 頁(yè)面資源的同時(shí),也會(huì)請(qǐng) 求該 HTML 頁(yè)面里包含的其他資源版姑。因此柱搜,每次的請(qǐng)求都會(huì)造成無(wú)謂的 TCP 連接建立和斷開(kāi),增加通信量的 開(kāi)銷(xiāo)剥险。

2.持久連接的特點(diǎn)

為解決上述 TCP 連接的問(wèn)題聪蘸,HTTP/1.1 和一部分的 HTTP/1.0 想出了持久連接(HTTP Persistent Connections,也稱(chēng)為 HTTP keep-alive 或 HTTP connection reuse)的方法表制。持久連接的特點(diǎn)是健爬,只要任意一端沒(méi)有明確提出斷開(kāi)連接,則保持TCP連接狀態(tài)么介。

持久連接的好處在于減少了 TCP 連接的重復(fù)建立和斷開(kāi)所造成的額外開(kāi)銷(xiāo)娜遵,減輕了服務(wù)器端的負(fù)載。另外壤短, 減少開(kāi)銷(xiāo)的那部分時(shí)間设拟,使 HTTP 請(qǐng)求和響應(yīng)能夠更早地結(jié)束,這樣 Web 頁(yè)面的顯示速度也就相應(yīng)提高了久脯。

在 HTTP/1.1 中纳胧,所有的連接默認(rèn)都是持久連接,但在 HTTP/1.0 內(nèi)并未標(biāo)準(zhǔn)化帘撰。雖然有一部分服務(wù)器通過(guò)非 標(biāo)準(zhǔn)的手段實(shí)現(xiàn)了持久連接跑慕,但服務(wù)器端不一定能夠支持持久連接。毫無(wú)疑問(wèn)骡和,除了服務(wù)器端相赁,客戶(hù)端也需 要支持持久連接。

七慰于、管線(xiàn)化

持久連接使得多數(shù)請(qǐng)求以管線(xiàn)化(pipelining)方式發(fā)送成為可能钮科。從前發(fā)送請(qǐng)求后需等待并收到響應(yīng),才能 發(fā)送下一個(gè)請(qǐng)求婆赠。管線(xiàn)化技術(shù)出現(xiàn)后绵脯,不用等待響應(yīng)亦可直接發(fā)送下一個(gè)請(qǐng)求佳励。

這樣就能夠做到同時(shí)并行發(fā)送多個(gè)請(qǐng)求,而不需要一個(gè)接一個(gè)地等待響應(yīng)了蛆挫。通俗地講赃承,請(qǐng)求打包一次傳輸過(guò)去,響應(yīng)打包一次傳遞回來(lái)悴侵。管線(xiàn)化的前提是在持久連接下瞧剖。

假如當(dāng)請(qǐng)求一個(gè)包含 10 張圖片的 HTML Web 頁(yè)面,與挨個(gè)連接相比可免,用持久連接可以讓請(qǐng)求更快結(jié)束抓于。 而管線(xiàn)化技術(shù)則比持久連接還要快。請(qǐng)求數(shù)越多浇借,時(shí)間差就越明顯捉撮。客戶(hù)端需要請(qǐng)求這十個(gè)資源妇垢。以前的做法是巾遭,在同一個(gè)TCP連接里面,先發(fā)送A請(qǐng)求闯估,然后等待服務(wù)器做出回應(yīng)灼舍,收到后再發(fā)出B請(qǐng)求,以此類(lèi)推睬愤,而管道機(jī)制則是允許瀏覽器同時(shí)發(fā)出這十個(gè)請(qǐng)求片仿,但是服務(wù)器還是按照順序,先回應(yīng)A請(qǐng)求尤辱,完成后再回應(yīng)B請(qǐng)求。

于是在使用持久連接的情況下厢岂,某個(gè)連接上消息的傳遞類(lèi)似于

請(qǐng)求1->響應(yīng)1->請(qǐng)求2->響應(yīng)2->請(qǐng)求3->響應(yīng)3

管線(xiàn)化方式發(fā)送變成了類(lèi)似這樣:

請(qǐng)求1->請(qǐng)求2->請(qǐng)求3->響應(yīng)1->響應(yīng)2->響應(yīng)3

最后

“相信有很多想學(xué)前端的小伙伴光督,今年年初我花了一個(gè)月整理了一份最適合2018年學(xué)習(xí)的web前端干貨,從最基礎(chǔ)的HTML+CSS+JS到移動(dòng)端HTML5到各種框架都有整理塔粒,送給每一位前端小伙伴结借,53763,

1707這里是小白聚集地卒茬,歡迎初學(xué)和進(jìn)階中的小伙伴船老。”

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末圃酵,一起剝皮案震驚了整個(gè)濱河市柳畔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌郭赐,老刑警劉巖薪韩,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡俘陷,警方通過(guò)查閱死者的電腦和手機(jī)罗捎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拉盾,“玉大人桨菜,你說(shuō)我怎么就攤上這事∽狡” “怎么了雷激?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)告私。 經(jīng)常有香客問(wèn)我屎暇,道長(zhǎng),這世上最難降的妖魔是什么驻粟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任根悼,我火速辦了婚禮,結(jié)果婚禮上蜀撑,老公的妹妹穿的比我還像新娘挤巡。我一直安慰自己,他們只是感情好酷麦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布矿卑。 她就那樣靜靜地躺著,像睡著了一般沃饶。 火紅的嫁衣襯著肌膚如雪母廷。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天糊肤,我揣著相機(jī)與錄音琴昆,去河邊找鬼。 笑死馆揉,一個(gè)胖子當(dāng)著我的面吹牛业舍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播升酣,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼舷暮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了噩茄?” 一聲冷哼從身側(cè)響起下面,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎巢墅,沒(méi)想到半個(gè)月后诸狭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體券膀,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年驯遇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芹彬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叉庐,死狀恐怖舒帮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情陡叠,我是刑警寧澤玩郊,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站枉阵,受9級(jí)特大地震影響译红,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兴溜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一侦厚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拙徽,春花似錦刨沦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至岛心,卻和暖如春来破,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鹉梨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工讳癌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人存皂。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像逢艘,于是被迫代替她去往敵國(guó)和親旦袋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容