對(duì)HTTP協(xié)議的理解

主要從兩個(gè)角度來(lái)理解缀拭,計(jì)算機(jī)網(wǎng)絡(luò)和前端的角度犬耻。
一、HTTP簡(jiǎn)介
在計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議的發(fā)展史中勋乾,目前主流的HTTP1.1依舊霸占著市場(chǎng)宋下,新出的HTTP2.0正以興起之勢(shì)慢慢浮出水面,它在各大瀏覽器中的兼容性問(wèn)題還得進(jìn)一步解決辑莫。
HTTP協(xié)議又名超文本傳輸協(xié)議杨凑,只要用于從萬(wàn)維網(wǎng)服務(wù)器傳輸文本到本地瀏覽器的傳送協(xié)議。它是一個(gè)基于TCP/IP的應(yīng)用層協(xié)議摆昧,

http請(qǐng)求-響應(yīng)模型

主要特點(diǎn):
1.支持B/S和C/S模式撩满;
2.限制每次連接只能處理一個(gè)請(qǐng)求。服務(wù)器處理完客戶端的請(qǐng)求,并收到客戶端的應(yīng)答后伺帘,就斷開(kāi)連接昭躺;
3.HTTP允許傳輸任意類(lèi)型的數(shù)據(jù)對(duì)象。傳輸?shù)念?lèi)型由content-type標(biāo)記伪嫁;
4.客戶端向服務(wù)器請(qǐng)求服務(wù)時(shí)领炫,只用發(fā)送請(qǐng)求方法和請(qǐng)求路徑。也就是常說(shuō)的輸入一個(gè)url张咳,并且告訴他我需要用get或者post方法傳輸帝洪。
5.HTTP是無(wú)記憶能力的協(xié)議,如果后面的處理需要前面的信息脚猾,則它必須重傳葱峡。
二、計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議角度
HTTP/1.1
HTTP/1.1從1997年發(fā)布到現(xiàn)在龙助,過(guò)了二十年砰奕,它仍舊是目前最流行的版本。
1.它最大的變化時(shí)引入了長(zhǎng)連接提鸟,即TCP連接默認(rèn)不關(guān)閉军援,不用再像HTTP/1.0那樣需要申明connection:keep-alive,只有當(dāng)客戶端和服務(wù)器發(fā)現(xiàn)對(duì)方一段時(shí)間沒(méi)有活動(dòng)称勋,才會(huì)關(guān)閉連接胸哥。
2.HTTP1.1還引入了管道機(jī)制,保證客戶端可以同時(shí)發(fā)送多個(gè)請(qǐng)求赡鲜,解決了客戶端只能發(fā)送一個(gè)請(qǐng)求的窘境空厌,大大提高HTTP協(xié)議的效率。
3.加入了content-length字段蝗蛙。既然現(xiàn)在TCP可以傳送多個(gè)響應(yīng)蝇庭,勢(shì)必要有一種機(jī)制醉鳖,區(qū)分?jǐn)?shù)據(jù)是屬于哪一個(gè)響應(yīng)的捡硅。content-length指定本次響應(yīng)的數(shù)據(jù)長(zhǎng)度。后面的字段就屬于下一個(gè)響應(yīng)了盗棵。
HTTP/2
2015年發(fā)布HTTP/2壮韭,它是一個(gè)徹底的二進(jìn)制協(xié)議,頭信息和數(shù)據(jù)體都是二進(jìn)制纹因,并且統(tǒng)稱(chēng)為幀喷屋。
1.多工工作方式。HTTP1.1只是解決了客戶端一個(gè)只能發(fā)送一個(gè)請(qǐng)求的問(wèn)題瞭恰,而HTTP2則讓服務(wù)器一個(gè)也能同時(shí)發(fā)送多個(gè)響應(yīng)屯曹,即到了版本2,客戶端和服務(wù)器都可以同時(shí)發(fā)送多個(gè)請(qǐng)求和響應(yīng),而且不用排隊(duì),避免了“”隊(duì)列堵塞“”恶耽。
2.二進(jìn)制協(xié)議密任。HTTP1.1的頭部信息是文本,數(shù)據(jù)部分可以是文本偷俭,也可以是二進(jìn)制編碼浪讳,而HTTP2是徹底的二進(jìn)制。
3.頭信息壓縮涌萤。HTTP2對(duì)每次的請(qǐng)求頭采用gzip壓縮淹遵,這樣避免了每次請(qǐng)求頭中重復(fù)出現(xiàn)相同的信息。
4.服務(wù)器主動(dòng)推送负溪⊥复В客戶端向服務(wù)器請(qǐng)求資源A,服務(wù)器預(yù)測(cè)客戶端可能需要B笙以,順便把B也推送給了客戶端淌实,避免了客戶端多次請(qǐng)求。
HTTPS
HTTP協(xié)議因?yàn)槭敲魑膫鬏敳螅醇用懿鹌恚瑯O其不安全,于是網(wǎng)景公司設(shè)計(jì)了SSL協(xié)議倘感,用于對(duì)HTTP協(xié)議傳輸?shù)臄?shù)據(jù)進(jìn)行進(jìn)行加密放坏,從而誕生了HTTPS。后來(lái)SSL安全協(xié)議升級(jí)為了TSL協(xié)議老玛,所以現(xiàn)在的HTTPS協(xié)議用的是TSL.
三淤年、前端中的HTTP
狀態(tài)碼

請(qǐng)求方法Get和Post
GET請(qǐng)求實(shí)例:
1.0 GET http://weibo.com/signup/signup.php?inviteCode=2388493434
2.0 Host: weibo.com
3.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
POST請(qǐng)求實(shí)例:
Host: www.joes-hardware.com
Content-Type: text/plain
Content-length: 18
item=bandsaw 2647

區(qū)別
1.最直觀的區(qū)別
就是GET把參數(shù)包含在URL中,POST通過(guò)request body傳遞參數(shù)蜡豹。
2.GET請(qǐng)求會(huì)被瀏覽器主動(dòng)緩存麸粮,POST不會(huì)。
3.GET請(qǐng)求參數(shù)會(huì)被完整保留在瀏覽器歷史記錄里镜廉,而POST中的參數(shù)不會(huì)被保留弄诲。
4.GET請(qǐng)求在URL中傳送的參數(shù)是有長(zhǎng)度限制的,會(huì)受到URL長(zhǎng)度的限制娇唯,一般URL最長(zhǎng)為2KB齐遵,而POST沒(méi)有限制。
5.GET安全性明顯低于POST塔插,因?yàn)閰?shù)在URL中的暴露梗摇。
6.GET產(chǎn)生一個(gè)TCP數(shù)據(jù)包;POST產(chǎn)生兩個(gè)TCP數(shù)據(jù)包。對(duì)于GET方式的請(qǐng)求想许,瀏覽器會(huì)把http header和data一并發(fā)送出去伶授,服務(wù)器響應(yīng)200(返回?cái)?shù)據(jù));
而對(duì)于POST断序,瀏覽器先發(fā)送header,服務(wù)器響應(yīng)100 continue糜烹,瀏覽器再發(fā)送data逢倍,服務(wù)器響應(yīng)200 ok(返回?cái)?shù)據(jù))。
相同點(diǎn):
它們都是HTTP協(xié)議中發(fā)送請(qǐng)求的方法景图,HTTP的底層是TCP/IP協(xié)議较雕,因此GET和POST也是TCP/IP。
HTTP Hearder詳解
HTTP協(xié)議采用了請(qǐng)求/響應(yīng)模型挚币,就整個(gè)網(wǎng)絡(luò)資源傳輸而言亮蒋,包括message-header和message-body兩部分。先傳遞message-header妆毕,即httpheader消息慎玖。http header 消息通常被分為4個(gè)部分:general header, request header, response header, entity header。但是這種分法就理解而言笛粘,感覺(jué)界限不太明確趁怔。根據(jù)維基百科對(duì)http header內(nèi)容的組織形式,大體分為Request和Response兩部分薪前。
以新浪首頁(yè)為例
General
Request URL :Client請(qǐng)求地址
Request Method:請(qǐng)求類(lèi)型 get润努、post、put示括、delete等
Status Code:響應(yīng)狀態(tài)碼 200铺浇、404、503等
Remote Address:域名對(duì)應(yīng)的真實(shí)ip:port

實(shí)體

Request header
Accept:客戶端/發(fā)送端能夠接收的數(shù)據(jù)類(lèi)型 text/html,application/xhtml+xml,application/xml垛膝; Accept-Encoding:瀏覽器可以支持的- web服務(wù)器返回內(nèi)容壓縮編碼類(lèi)型 gzip, deflate
Accept-Language:瀏覽器可接收的語(yǔ)言 zh-CN,zh;q=0.8
Cache-Control:請(qǐng)求和響應(yīng)遵循的緩存機(jī)制鳍侣,當(dāng)前請(qǐng)求的Cache-Control不會(huì)影響另一個(gè)請(qǐng)求的緩存處理。private(默認(rèn))吼拥、no-cache倚聚、must-revalidate、max-age凿可。這個(gè)參數(shù)有幾種不同的使用場(chǎng)景:
打開(kāi)一個(gè)新的窗口惑折。private、no-cache矿酵、must-revalidate會(huì)重新請(qǐng)求服務(wù)器; max-age在超過(guò)時(shí)間年齡值時(shí)才會(huì)重新請(qǐng)求唬复。
地址欄回車(chē)矗积。private全肮、must-revalidate只有第一次時(shí)會(huì)請(qǐng)求服務(wù)器; no-cache每次都會(huì)請(qǐng)求;max-age在超過(guò)時(shí)間年齡值時(shí)才會(huì)重新請(qǐng)求棘捣。
后退按鈕辜腺。只有no-cache每次都重新請(qǐng)求服務(wù)器。
刷新。全部重新請(qǐng)求服務(wù)器
Connection: 是否保持與服務(wù)器的tcp長(zhǎng)連接评疗。keep-alive(默認(rèn))测砂、close。Keep-alive代表服務(wù)會(huì)保留當(dāng)前連接一段時(shí)間被其他請(qǐng)求重復(fù)使用百匆;close代表請(qǐng)求之后關(guān)閉連接砌些。
Content-Length: 請(qǐng)求體的長(zhǎng)度
Content-Type: 請(qǐng)求內(nèi)容的格式/類(lèi)型 application/x-www-form-urlencoded application/json
Cookie: 客戶端緩存的Cookie,在請(qǐng)求發(fā)送時(shí)會(huì)發(fā)送到服務(wù)端
Host: 請(qǐng)求的服務(wù)器域名
Referer: 當(dāng)前請(qǐng)求的來(lái)源
User-Agent: 發(fā)出請(qǐng)求的客戶端信息 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36


請(qǐng)求頭

Response header
Cache-Control:請(qǐng)求和響應(yīng)遵循的緩存機(jī)制
Connection:是否保持與服務(wù)器的tcp長(zhǎng)連接加匈。keep-alive(默認(rèn))存璃、close。Keep-alive代表服務(wù)會(huì)保留當(dāng)前連接一段時(shí)間被其他請(qǐng)求重復(fù)使用雕拼;close代表請(qǐng)求之后關(guān)閉連接纵东。
Content-Type:響應(yīng)內(nèi)容的格式/類(lèi)型text/html;charset=UTF-8標(biāo)識(shí)返回的內(nèi)容是文本類(lèi)型,html格式啥寇。
Content-Encoding:web服務(wù)器支持的返回內(nèi)容壓縮編碼類(lèi)型 gzip
Content-Language:響應(yīng)體的語(yǔ)言
Content-Length:響應(yīng)體的長(zhǎng)度
Date: 消息發(fā)出時(shí)間(GMT) Sat, 23 Apr 2016 07:47:54 GMT GMT+8=北京時(shí)間
Expires: 響應(yīng)過(guò)期時(shí)間
Transfer-Encoding:文件傳輸編碼chunked標(biāo)識(shí)傳輸內(nèi)容長(zhǎng)度不確定偎球,如果以gzip方式輸出時(shí),就不必申請(qǐng)一個(gè)很大的字節(jié)數(shù)組了辑甜,可以一塊一塊的輸出衰絮,更科學(xué),占用資源更少磷醋。
Vary: 提示使用緩存響應(yīng)還是從原始服務(wù)器請(qǐng)求岂傲,即當(dāng)緩存中存在一個(gè)未過(guò)期的響應(yīng)是否能被后續(xù)的請(qǐng)求服用,Accept-Encoding子檀、User-Agent镊掖。如果vary的值中返回了User-Agent,那么通過(guò)不同的瀏覽器打開(kāi)相同的頁(yè)面都會(huì)重新請(qǐng)求服務(wù)器褂痰;如果Vary中沒(méi)返回User-Agent亩进,那么客戶端緩存把它看成是相同的頁(yè)面,相同的請(qǐng)求缩歪,直接給用戶返回緩存的內(nèi)容归薛;如果返回的值是Accept-Encoding,將請(qǐng)求頭信息中的Accept-encoding字段的值(gzip等)作為緩存的key;如果vary的值為*表示緩存不會(huì)去做判斷匪蝙;


額外:
Form data(post)
這個(gè)版塊是在Request Method為post請(qǐng)求類(lèi)型時(shí)顯示的post表單數(shù)據(jù)主籍。
Query String Parameter(get)
這個(gè)版塊是在Request Method為get請(qǐng)求類(lèi)型時(shí)向服務(wù)端傳遞的請(qǐng)求參數(shù)。

具體reasponse和Requese的參數(shù)解釋參看:
https://kb.cnblogs.com/page/92320/
HTTP狀態(tài)碼參看
http://tool.oschina.net/commons?type=5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逛球,一起剝皮案震驚了整個(gè)濱河市千元,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颤绕,老刑警劉巖幸海,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祟身,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡物独,警方通過(guò)查閱死者的電腦和手機(jī)袜硫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)挡篓,“玉大人婉陷,你說(shuō)我怎么就攤上這事」傺校” “怎么了憨攒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)阀参。 經(jīng)常有香客問(wèn)我肝集,道長(zhǎng),這世上最難降的妖魔是什么蛛壳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任杏瞻,我火速辦了婚禮,結(jié)果婚禮上衙荐,老公的妹妹穿的比我還像新娘捞挥。我一直安慰自己,他們只是感情好忧吟,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布砌函。 她就那樣靜靜地躺著,像睡著了一般溜族。 火紅的嫁衣襯著肌膚如雪讹俊。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天煌抒,我揣著相機(jī)與錄音仍劈,去河邊找鬼。 笑死寡壮,一個(gè)胖子當(dāng)著我的面吹牛贩疙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播况既,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼这溅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了棒仍?” 一聲冷哼從身側(cè)響起悲靴,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎降狠,沒(méi)想到半個(gè)月后对竣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡榜配,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年否纬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛋褥。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡临燃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出烙心,到底是詐尸還是另有隱情膜廊,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布淫茵,位于F島的核電站爪瓜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏匙瘪。R本人自食惡果不足惜铆铆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丹喻。 院中可真熱鬧薄货,春花似錦、人聲如沸碍论。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鳍悠。三九已至税娜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間藏研,已是汗流浹背巧涧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留遥倦,地道東北人谤绳。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像袒哥,于是被迫代替她去往敵國(guó)和親缩筛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理堡称,服務(wù)發(fā)現(xiàn)瞎抛,斷路器,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • 一却紧、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,337評(píng)論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng)桐臊,內(nèi)容來(lái)源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,210評(píng)論 3 82
  • http協(xié)議有http0.9胎撤,http1.0,http1.1和http2三個(gè)版本断凶,但是現(xiàn)在瀏覽器使用的是htt...
    一現(xiàn)_閱讀 1,855評(píng)論 0 3
  • HTTP概述 超文本傳輸協(xié)議(HTTP伤提,HyperText Transfer Protocol) 是互聯(lián)網(wǎng)上應(yīng)用最...
    曹淵說(shuō)創(chuàng)業(yè)閱讀 3,843評(píng)論 2 61