了解Http基礎(chǔ)

網(wǎng)絡(luò)分層模型:

TCP/IP四層模型——>(應(yīng)用層)姿鸿、(傳輸層)、(網(wǎng)絡(luò)層)见秤、(網(wǎng)絡(luò)接口層)

TCP/IP五層模型——>(應(yīng)用層)、(傳輸層)、(網(wǎng)絡(luò)層)屈尼、(數(shù)據(jù)鏈路層炊汹、物理層)

OSI(開放式系統(tǒng)互聯(lián))——>(應(yīng)用層躬充、表示層、會(huì)話層)讨便、(傳輸層)充甚、(網(wǎng)絡(luò)層)、(數(shù)據(jù)鏈路層霸褒、物理層)


TCP/IP基礎(chǔ):

TCP三次握手——>

    第一次握手:建立連接時(shí)伴找,客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SENT狀態(tài)废菱,等待服務(wù)器確認(rèn)技矮;SYN:同步序列編號(hào)(Synchronize Sequence Numbers)。

    第二次握手:服務(wù)器收到syn包殊轴,必須確認(rèn)客戶的SYN(ack=j+1)衰倦,同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包梳凛,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)耿币;ACK:確認(rèn)字符

    第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1)韧拒,此包發(fā)送完畢淹接,客戶端和服務(wù)器進(jìn)入ESTABLISHED(TCP連接成功)狀態(tài),完成三次握手叛溢。


TCP四次揮手——>

    第一步塑悼,當(dāng)主機(jī)A的應(yīng)用程序通知TCP數(shù)據(jù)已經(jīng)發(fā)送完畢時(shí),TCP向主機(jī)B發(fā)送一個(gè)帶有FIN附加標(biāo)記的報(bào)文段(FIN表示英文finish)楷掉。

    第二步厢蒜,主機(jī)B收到這個(gè)FIN報(bào)文段之后,并不立即用FIN報(bào)文段回復(fù)主機(jī)A,而是先向主機(jī)A發(fā)送一個(gè)確認(rèn)序號(hào)ACK斑鸦,同時(shí)通知自己相應(yīng)的應(yīng)用程序:對(duì)方要求關(guān)閉連接(先發(fā)送ACK的目的是為了防止在這段時(shí)間內(nèi)愕贡,對(duì)方重傳FIN報(bào)文段)。

    第三步巷屿,主機(jī)B的應(yīng)用程序告訴TCP:我要徹底的關(guān)閉連接固以,TCP向主機(jī)A送一個(gè)FIN報(bào)文段。

    第四步嘱巾,主機(jī)A收到這個(gè)FIN報(bào)文段后憨琳,向主機(jī)B發(fā)送一個(gè)ACK表示連接徹底釋放。


一旬昭、HTTP1.0與HTTP 1.1的主要區(qū)別

1. 長(zhǎng)連接

    HTTP 1.0需要使用keep-alive參數(shù)來告知服務(wù)器端要建立一個(gè)長(zhǎng)連接篙螟,而HTTP1.1默認(rèn)支持長(zhǎng)連接。

    HTTP是基于TCP/IP協(xié)議的问拘,創(chuàng)建一個(gè)TCP連接是需要經(jīng)過三次握手的,有一定的開銷遍略,如果每次通訊都要重新建立連接的話,對(duì)性能有影響场梆。因此最好能維持一個(gè)長(zhǎng)連接墅冷,可以用一個(gè)長(zhǎng)連接來發(fā)多個(gè)請(qǐng)求纯路。

2.節(jié)約帶寬

    HTTP 1.1支持只發(fā)送header信息(不帶任何body信息)或油,如果服務(wù)器認(rèn)為客戶端有權(quán)限請(qǐng)求服務(wù)器,則返回100驰唬,否則返回401顶岸。客戶端如果接收到100叫编,才開始把請(qǐng)求body發(fā)送到服務(wù)器辖佣。這樣當(dāng)服務(wù)器返回401的時(shí)候,客戶端就可以不用發(fā)送請(qǐng)求body了搓逾,節(jié)約了帶寬卷谈。
    
    另外HTTP還支持傳送內(nèi)容的一部分。這樣當(dāng)客戶端已經(jīng)有一部分的資源后霞篡,只需要跟服務(wù)器請(qǐng)求另外的部分資源即可世蔗。這是支持文件斷點(diǎn)續(xù)傳的基礎(chǔ)。

3.HOST域

    現(xiàn)在可以用web server(例如tomat)朗兵,設(shè)置虛擬站點(diǎn)是非常常見的污淋,也即是說,web server上的多個(gè)虛擬站點(diǎn)可以共享同一個(gè)ip和端口余掖。HTTP1.0是沒有host域的寸爆,HTTP1.1才支持這個(gè)參數(shù)。

二、HTTP1.1與HTTP 2.0的主要區(qū)別

HTTP 2.0的出現(xiàn)赁豆,相比于HTTP 1.x,大幅度的提升了web性能仅醇。在與HTTP/1.1完全語(yǔ)義兼容的基礎(chǔ)上,進(jìn)一步減少了網(wǎng)絡(luò)延遲魔种。而對(duì)于前端開發(fā)人員來說着憨,無疑減少了在前端方面的優(yōu)化工作。

下面基于HTTP 2.0協(xié)議的幾個(gè)基本技術(shù)點(diǎn)來說明HTTP1.1與HTTP2.0的區(qū)別

1. 多路復(fù)用

    允許同時(shí)通過單一的 HTTP/2 連接發(fā)起多重的請(qǐng)求-響應(yīng)消息务嫡。 

        眾所周知甲抖,在HTTP/1.1協(xié)議中,瀏覽器客戶端在同一時(shí)間針對(duì)同一域名的請(qǐng)求有一定數(shù)據(jù)限制心铃。超過限制數(shù)目的請(qǐng)求會(huì)被阻塞准谚。

        HTTP2.0使用了多路復(fù)用的技術(shù),做到同一個(gè)連接并發(fā)處理多個(gè)請(qǐng)求去扣,而且并發(fā)請(qǐng)求的數(shù)量比HTTP1.1大了好幾個(gè)數(shù)量級(jí)柱衔。

        當(dāng)然HTTP1.1也可以多建立幾個(gè)TCP連接,來支持處理更多并發(fā)的請(qǐng)求愉棱,但是創(chuàng)建TCP連接本身也是有開銷的唆铐。

        TCP連接有一個(gè)預(yù)熱和保護(hù)的過程,先檢查數(shù)據(jù)是否傳送成功奔滑,一旦成功過艾岂,則慢慢加大傳輸速度。因此對(duì)應(yīng)瞬時(shí)并發(fā)的連接朋其,服務(wù)器的響應(yīng)就會(huì)變慢王浴。所以最好能使用一個(gè)建立好的連接,并且這個(gè)連接可以支持瞬時(shí)并發(fā)的請(qǐng)求梅猿。

        在過去氓辣,HTTP性能優(yōu)化的關(guān)鍵并不在于高帶寬,而是低延遲袱蚓。

        單連接多資源的方式钞啸,減少服務(wù)端的鏈接壓力,內(nèi)存占用更少,連接吞吐量更大

        由于 TCP 連接的減少而使網(wǎng)絡(luò)擁塞狀況得以改善,同時(shí)慢啟動(dòng)時(shí)間的減少,使擁塞和丟包恢復(fù)速度更快

2. 二進(jìn)制分幀

    在不改動(dòng)HTTP/1.x的語(yǔ)義喇潘、語(yǔ)法体斩、狀態(tài)嗎、URI以及首部字段……的情況下响蓉,HTTP/2是如何作做到“突破HTTP1.1的性能限制硕勿,改進(jìn)傳輸性能,實(shí)現(xiàn)低延遲和高吞吐量”的枫甲?

    關(guān)鍵之一就是在應(yīng)用層(HTTP/2)和傳輸層(TCP or UDP)之間增加一個(gè)二進(jìn)制分幀層源武。

3. 首部壓縮

    HTTP1.1不支持header數(shù)據(jù)的壓縮扼褪,HTTP2.0使用HPACK算法對(duì)header的數(shù)據(jù)進(jìn)行壓縮,這樣數(shù)據(jù)體積小了粱栖,在網(wǎng)絡(luò)上傳輸就會(huì)更快话浇。

4. 服務(wù)器推送

    服務(wù)端推送是一種在客戶端請(qǐng)求之前發(fā)送數(shù)據(jù)的機(jī)制。

    在HTTP/2中闹究,服務(wù)器可以對(duì)客戶端的一個(gè)請(qǐng)求發(fā)送多個(gè)響應(yīng)幔崖。

    Server Push 讓HTTP1.x時(shí)代使用內(nèi)嵌資源的優(yōu)化手段變得沒有意義;

    意思是說渣淤,當(dāng)我們對(duì)支持HTTP2.0的web server請(qǐng)求數(shù)據(jù)的時(shí)候赏寇,服務(wù)器會(huì)順便把一些客戶端需要的資源一起推送到客戶端,免得客戶端再次創(chuàng)建連接發(fā)送請(qǐng)求到服務(wù)器端獲取价认。這種方式非常合適加載靜態(tài)資源嗅定。

    服務(wù)器推送可以緩存,并且在遵循同源的情況下用踩,不同頁(yè)面之間可以共享緩存渠退。

    因此當(dāng)客戶端需要的數(shù)據(jù)已緩存時(shí),客戶端直接從本地加載這些資源就可以了脐彩,不用走網(wǎng)絡(luò)碎乃,速度自然是快很多的。


TCP頭結(jié)構(gòu):

1. TCP源端口(Source Port):
    16位的源端口其中包含初始化通信的端口惠奸。源端口和源IP地址的作用是標(biāo)示報(bào)文的返回地址梅誓。

2. TCP目的端口(Destination port):
    16位的目的端口域定義傳輸?shù)哪康摹_@個(gè)端口指明報(bào)文接收計(jì)算機(jī)上的應(yīng)用程序地址接口晨川。

3. TCP序列號(hào)(序列碼证九,Sequence Number):
    32位的序列號(hào)由接收端計(jì)算機(jī)使用删豺,重新分段的報(bào)文成最初形式共虑。當(dāng)SYN出現(xiàn),序列碼實(shí)際上是初始序列碼(ISN)呀页,而第一個(gè)數(shù)據(jù)字節(jié)是ISN+1妈拌。這個(gè)序列號(hào)(序列碼)是可以補(bǔ)償傳輸中的 不一致。

4. TCP應(yīng)答號(hào)(Acknowledgment Number):
    32位的序列號(hào)由接收端計(jì)算機(jī)使用蓬蝶,重組分段的報(bào)文成最初形式尘分。如果設(shè)置了ACK控制位,這個(gè)值表示一個(gè)準(zhǔn)備接收的包的序列碼丸氛。

5. 數(shù)據(jù)偏移量(HLEN):
    4位包括TCP頭大小培愁,指示何處數(shù)據(jù)開始。

6.保留(Reserved):
    6位值域缓窜,這些位必須是0定续。為了將來定義新的用途所保留谍咆。

7. 志(Code Bits):
    6位標(biāo)志域。表示為:緊急標(biāo)志私股、有意義的應(yīng)答標(biāo)志摹察、推、重置連接標(biāo)志倡鲸、同步序列號(hào)標(biāo)志供嚎、完成發(fā)送數(shù)據(jù)標(biāo)志。按照順序排列是:URG峭状、ACK克滴、PSH、RST优床、SYN偿曙、FIN。

8. 窗口(Window):
    16位羔巢,用來表示想收到的每個(gè)TCP數(shù)據(jù)段的大小望忆。

9. 校驗(yàn)位(Checksum):
    16位TCP頭。源機(jī)器基于數(shù)據(jù)內(nèi)容計(jì)算一個(gè)數(shù)值竿秆,收信息機(jī)要與源機(jī)器數(shù)值結(jié)果完全一樣启摄,從而證明數(shù)據(jù)的有效性。

10. 優(yōu)先指針(緊急幽钢,Urgent Pointer):
    16位歉备,指向后面是優(yōu)先數(shù)據(jù)的字節(jié),在URG標(biāo)志設(shè)置了時(shí)才有效匪燕。如果URG標(biāo)志沒有被設(shè)置蕾羊,緊急域作為填充。加快處理標(biāo)示為緊急的數(shù)據(jù)段帽驯。

11. 選項(xiàng)(Option):
    長(zhǎng)度不定龟再,但長(zhǎng)度必須是一個(gè)字節(jié)。如果沒有選項(xiàng)就表示這一個(gè)字節(jié)的域等于0尼变。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末利凑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嫌术,更是在濱河造成了極大的恐慌哀澈,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件度气,死亡現(xiàn)場(chǎng)離奇詭異割按,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)磷籍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門适荣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丙躏,“玉大人,你說我怎么就攤上這事束凑∩孤茫” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵汪诉,是天一觀的道長(zhǎng)废恋。 經(jīng)常有香客問我,道長(zhǎng)扒寄,這世上最難降的妖魔是什么鱼鼓? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮该编,結(jié)果婚禮上迄本,老公的妹妹穿的比我還像新娘。我一直安慰自己课竣,他們只是感情好嘉赎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著于樟,像睡著了一般公条。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上迂曲,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天靶橱,我揣著相機(jī)與錄音,去河邊找鬼路捧。 笑死关霸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杰扫。 我是一名探鬼主播队寇,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼涉波!你這毒婦竟也來了英上?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤啤覆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后惭聂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窗声,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年辜纲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了笨觅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拦耐。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖见剩,靈堂內(nèi)的尸體忽然破棺而出杀糯,到底是詐尸還是另有隱情,我是刑警寧澤苍苞,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布固翰,位于F島的核電站,受9級(jí)特大地震影響羹呵,放射性物質(zhì)發(fā)生泄漏骂际。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一冈欢、第九天 我趴在偏房一處隱蔽的房頂上張望歉铝。 院中可真熱鬧,春花似錦凑耻、人聲如沸太示。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)先匪。三九已至,卻和暖如春弃衍,著一層夾襖步出監(jiān)牢的瞬間呀非,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工镜盯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岸裙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓速缆,卻偏偏與公主長(zhǎng)得像降允,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子艺糜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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