初識(shí)HTTP——《圖解HTTP》note1

1. 前言

最近打算學(xué)習(xí)一些網(wǎng)絡(luò)相關(guān)的知識(shí),經(jīng)別人推薦,說《圖解HTTP》這本書不錯(cuò)婆廊,于是便買來打算學(xué)習(xí)一波迅细。筆記之中有什么錯(cuò)誤,還望指出_淘邻。

一般的網(wǎng)絡(luò)協(xié)議相關(guān)的書籍茵典,僅僅是其厚度就令人望而生畏;但這本書僅僅有二百五十多頁宾舅,讓人不那么抵觸统阿,而且內(nèi)容圖文并茂,也不是那么枯燥筹我,讓人有種想看下去的欲望扶平。

好了,廢話不多說了蔬蕊,在學(xué)習(xí)HTTP之前结澄,先了解了一下HTTP的發(fā)展歷史和一些網(wǎng)絡(luò)基礎(chǔ)。

2. HTTP袁串,一個(gè)發(fā)育緩慢的孩子

2.1 什么是 HTTP 概而?

我們使用HTTP最多的時(shí)候,就是我們?cè)跒g覽網(wǎng)頁的時(shí)候囱修。

當(dāng)你在瀏覽器的地址欄中輸入網(wǎng)址后赎瑰,一回車就會(huì)呈現(xiàn)出你要搜尋的頁面,那么這個(gè)過程是如何實(shí)現(xiàn)的呢破镰?

其實(shí)是我們的瀏覽器會(huì)根據(jù)你輸入的網(wǎng)址餐曼,去對(duì)應(yīng)的服務(wù)器端獲取到相應(yīng)的資源,然后在將它顯示出來鲜漩。那么在這個(gè)過程中源譬,肯定要遵守一個(gè)規(guī)則,這個(gè)規(guī)則就是HTTP協(xié)議孕似。

HTTP(HyperText Transfer Protocol),中文名字叫“超文本傳輸協(xié)議”踩娘。HTTP誕生于1990年,由CERN(歐洲核子研究組織)提出喉祭,目的是為解決文檔傳輸難題养渴,讓遠(yuǎn)隔兩地的研究者實(shí)現(xiàn)知識(shí)共享。

2.2 Web技術(shù)飛速發(fā)展

1990年11月泛烙,CERN 研發(fā)出第一臺(tái)Web服務(wù)器和Web瀏覽器理卑;

1993年,HTML1.0在全世界范圍流行蔽氨;

1994年藐唠,網(wǎng)景通信公司發(fā)布了瀏覽器 Netscape Navigator 1.0帆疟;

1995年,微軟公司發(fā)布了瀏覽器 Internet Explorer 1.0 和 2.0宇立,瀏覽器大戰(zhàn)一觸即發(fā)踪宠;

隨后 Web服務(wù)器標(biāo)準(zhǔn)之一的 Apache 以 Apache 0.2 的姿態(tài)出現(xiàn)在世人面前,HTML 也發(fā)布了 2.0 版本泄伪。

隨著瀏覽器大戰(zhàn)愈演愈烈殴蓬,瀏覽器公司不顧Web標(biāo)準(zhǔn)化,屢次新增功能卻沒有對(duì)應(yīng)的說明文檔蟋滴,而且還對(duì)各自的HTML進(jìn)行了擴(kuò)展染厅,導(dǎo)致前端工程師開發(fā)時(shí),必須考慮兼容他們公司的瀏覽器津函。

2000年左右肖粮,隨著網(wǎng)景通信公司的衰落,瀏覽器大戰(zhàn)也告一段落尔苦。但在2004年涩馆,Mozilla基金會(huì)發(fā)布了 Firefox(火狐)瀏覽器,瀏覽器大戰(zhàn)再次爆發(fā)允坚。

Chrome魂那、Opera、Safari 等瀏覽器也紛紛搶占市場(chǎng)稠项。

2.3 駐足不前的HTTP

1990年 HTTP 問世涯雅,但那時(shí)沒有作為正式的標(biāo)準(zhǔn),所以稱之為 HTTP/0.9;

1996年5月展运,HTTP 正式作為標(biāo)準(zhǔn)版公布活逆,命名為 HTTP/1.0,該協(xié)議至今仍在廣泛使用在服務(wù)端拗胜。

1997年1月發(fā)布 HTTP/1.1蔗候,這是目前主流的HTTP協(xié)議版本。

現(xiàn)在 HTTP/2.0 正在制定中埂软,但要達(dá)到較高的使用覆蓋率锈遥,恐怕還需要一段時(shí)間。

3. 網(wǎng)絡(luò)基礎(chǔ) TCP/IP 協(xié)議族

現(xiàn)在通常使用的網(wǎng)絡(luò)都是在 TCP/IP 協(xié)議族的基礎(chǔ)上運(yùn)作的勘畔,HTTP協(xié)議就屬于它內(nèi)部的一個(gè)子集迷殿。

計(jì)算機(jī)要和網(wǎng)絡(luò)設(shè)備實(shí)現(xiàn)通信,雙方就必須基于同樣的方法咖杂,遵守各種協(xié)議,這樣把互聯(lián)網(wǎng)相關(guān)的協(xié)議集合起來蚊夫,總稱為 TCP/IP诉字。

3.1 TCP/IP 的分層管理

為了能方便的修改和擴(kuò)展,TCP/IP 采用分層的設(shè)計(jì)方式,這樣當(dāng)某個(gè)地方需要修改時(shí)壤圃,不需要更改整個(gè)協(xié)議陵霉,只需要修改相應(yīng)的層即可。

TCP/IP 協(xié)議族分為四層:應(yīng)用層伍绳,傳輸層踊挠,網(wǎng)絡(luò)層,鏈路層冲杀。

3.1.1 應(yīng)用層

應(yīng)用層決定了向用戶提供服務(wù)時(shí)通信的活動(dòng)效床,比如HTTP,F(xiàn)TP(文件傳輸協(xié)議)权谁,DNS(域名系統(tǒng))等剩檀。

3.1.2 傳輸層

傳輸層對(duì)上層應(yīng)用層,提供處于網(wǎng)絡(luò)連接中的兩臺(tái)計(jì)算機(jī)之間的數(shù)據(jù)傳輸旺芽。在這層有兩個(gè)性質(zhì)不同的協(xié)議:TCP(傳輸控制協(xié)議)沪猴,UDP(用戶數(shù)據(jù)報(bào)協(xié)議)。

3.1.3 網(wǎng)絡(luò)層

又名網(wǎng)絡(luò)互連層采章。該層用來處理網(wǎng)絡(luò)上流動(dòng)的數(shù)據(jù)包运嗜,規(guī)定通過怎樣的路徑把數(shù)據(jù)包傳遞給對(duì)方。IP協(xié)議等位于這一層悯舟。

3.1.4 鏈路層

又名數(shù)據(jù)鏈路層担租,網(wǎng)絡(luò)接口層。用于處理連接網(wǎng)絡(luò)的硬件部分图谷。

3.2 TCP/IP 通信傳輸流

圖1—TCP/IP 通信傳輸流1

如圖1所示翩活,利用 TCP/IP 進(jìn)行網(wǎng)絡(luò)通信時(shí),發(fā)送端從應(yīng)用層往下走便贵,而接收端從鏈路層往上走菠镇。

圖2—TCP/IP 通信傳輸流2

如圖2所示,發(fā)送端在傳遞數(shù)據(jù)時(shí)承璃,每經(jīng)過一層利耍,就會(huì)被打上一個(gè)包含該層所屬的首部信息;接收端在傳遞數(shù)據(jù)時(shí)盔粹,每經(jīng)過一層隘梨,就會(huì)把對(duì)應(yīng)的首部信息去掉。

4. 與 HTTP 密切相關(guān)的三個(gè)協(xié)議

在 TCP/IP 協(xié)議族中舷嗡,有三個(gè)和 HTTP 密不可分的協(xié)議轴猎,它們分別是 DNS服務(wù)、TCP協(xié)議 和 IP協(xié)議进萄。

4.1 負(fù)責(zé)域名解析的 DNS服務(wù)

DNS服務(wù) 和 HTTP協(xié)議 都位于應(yīng)用層捻脖。DNS服務(wù)提供域名到IP地址的解析服務(wù)锐峭。

什么是域名?比如 www.baidu.com 就是域名可婶。

什么是IP地址沿癞?比如 119.75.218.70。

域名和IP地址都是用來標(biāo)記計(jì)算機(jī)的矛渴,有了它就可以找到網(wǎng)絡(luò)上相應(yīng)的計(jì)算機(jī)椎扬,舉個(gè)不恰當(dāng)?shù)睦樱帽饶愕拿志褪怯蛎呶拢愕纳矸葑C號(hào)就是IP地址蚕涤,當(dāng)有人想找你的時(shí)候,即可以通過你的名字來找你桂躏,也可以通過你的身份證號(hào)來找你钻趋。

那么為什么會(huì)有兩個(gè)東西來標(biāo)記計(jì)算機(jī)呢? 因?yàn)橐粋€(gè)是給人看的剂习,一個(gè)是為計(jì)算機(jī)看的蛮位。與IP地址的一組純數(shù)字對(duì)比,用字母配合數(shù)字的表示形式更符合人類的記憶習(xí)慣鳞绕;但計(jì)算機(jī)就不擅長處理字母了失仁,它更擅長處理數(shù)字。

為了方便人們記憶们何,DNS服務(wù)應(yīng)運(yùn)而生萄焦,它提供通過域名查找IP地址,或逆向從IP地址反查域名的服務(wù)冤竹。

圖3—DNS域名解析

4.2 確狈鞣猓可靠性的 TCP協(xié)議

TCP協(xié)議位于傳輸層,提供可靠的字節(jié)流服務(wù)鹦蠕。

字節(jié)流服務(wù)是指冒签,為了方便傳輸,將 大塊數(shù)據(jù) 分割成以 報(bào)文段 為單位的 數(shù)據(jù)包 進(jìn)行管理钟病。

為了能夠確保數(shù)據(jù)到達(dá)目標(biāo)萧恕,TCP協(xié)議采用了 三次握手策略。

圖4—TCP的三次握手

如圖4所示肠阱,握手過程中使用了TCP的標(biāo)志:SYN(同步) 和 ACK(確認(rèn))票唆。

第一次握手:發(fā)送端先發(fā)送一個(gè)帶有SYN標(biāo)志的數(shù)據(jù)包給對(duì)方。

第二次握手:接收端收到后回傳一個(gè)帶有SYN/ACK標(biāo)志的數(shù)據(jù)包以表示已經(jīng)收到信息屹徘。

第三次握手:發(fā)送端再回傳一個(gè)帶ACK標(biāo)志的數(shù)據(jù)包走趋,表示握手結(jié)束。

如果在握手過程中的任何一個(gè)階段中斷噪伊,發(fā)送端會(huì)再次以相同的順序發(fā)送數(shù)據(jù)包吆视。

舉個(gè)不恰當(dāng)?shù)睦拥涮簦艜r(shí)候有甲、乙啦吧、丙三個(gè)國家打仗,這時(shí)候甲想聯(lián)合乙拙寡,一起攻打丙授滓。

一:但甲不知道乙愿不愿意,那時(shí)候沒有微信肆糕,掃個(gè)碼加個(gè)好友就能聊天般堆,所以只能靠飛鴿傳書。于是甲就寫了封信給乙诚啃。但甲不知道乙有沒有收到信淮摔,也不敢去貿(mào)然攻打丙,就等著乙的回信始赎。

二:這時(shí)候乙收到了信和橙,他也想和甲一起攻打丙,于是乙也寫了封信給甲造垛,告訴他我收到你的信了魔招,同意去攻打丙。但這時(shí)候乙也不敢輕舉妄動(dòng)五辽,他不知道甲有沒有收到信办斑,萬一甲沒收到信,就光我自己上杆逗,那就吃虧了乡翅,所以乙也等著甲的回信。

三:甲終于等到了乙的回信罪郊,既然同意一起攻打丙了蠕蚜,那么咱們就定個(gè)日子,什么時(shí)候去打丙吧排龄,于是甲又給乙寫了封信波势。

乙收到了甲的信,日子都定下了橄维,咱們就一起干吧尺铣。于是甲和乙這次敢出兵攻打丙。

如果有一方?jīng)]有收到回信争舞,肯定會(huì)再從頭來一遍凛忿。

4.3 負(fù)責(zé)傳輸?shù)?IP協(xié)議

IP協(xié)議位于網(wǎng)絡(luò)層,它的作用是把各種數(shù)據(jù)包傳遞給對(duì)方竞川。為了能傳遞到對(duì)方店溢,就必須滿足各類條件叁熔,其中最重要的兩個(gè)是 IP地址 和 MAC地址。

IP地址指明了節(jié)點(diǎn)被分配到的地址床牧,MAC地址指網(wǎng)卡所屬的固定地址荣回。IP地址可以變換,但MAC地址基本上不會(huì)改變戈咳。

一般發(fā)送數(shù)據(jù)包不會(huì)直接發(fā)送的對(duì)方那里心软,而是經(jīng)過多臺(tái)計(jì)算機(jī)和網(wǎng)絡(luò)設(shè)備中轉(zhuǎn),才能發(fā)送帶對(duì)方那里著蛙。在中轉(zhuǎn)時(shí)删铃,會(huì)利用下一站中轉(zhuǎn)設(shè)備的 MAC地址 來搜尋下一個(gè)中轉(zhuǎn)目標(biāo)。這里會(huì)采用 ARP協(xié)議踏堡,一種以解析地址的協(xié)議猎唁,可以根據(jù)通信方的IP地址就可以反查出對(duì)應(yīng)的MAC地址。

利用 IP協(xié)議 傳輸數(shù)據(jù)包顷蟆,就好比是快遞公司送貨一樣诫隅,一般都會(huì)從一個(gè)轉(zhuǎn)運(yùn)中心到另一個(gè)轉(zhuǎn)運(yùn)中心,直到可以送到你手中為止慕的。

圖5—IP協(xié)議

4.4 利用HTTP協(xié)議阎肝、IP協(xié)議、TCP協(xié)議和DNS服務(wù)來請(qǐng)求一個(gè)網(wǎng)頁的過程圖解

通過下面這個(gè)圖來了解一下在通信過程中肮街,這些協(xié)議都發(fā)揮了哪些作用风题。

圖6—訪問一個(gè)網(wǎng)頁的過程

5. URI 和 URL

5.1 URI 和 URL 簡介

URI(Uniform Resource Identifier,統(tǒng)一資源標(biāo)識(shí)符)嫉父,用字符串標(biāo)識(shí)某一互聯(lián)網(wǎng)資源沛硅。

URL(Uniform Resource Locator,統(tǒng)一資源定位符)绕辖,表示互聯(lián)網(wǎng)上資源所處的位置摇肌。

可見,URL 是 URI 的子集仪际。

圖7—URI示例

如圖7所示围小,列舉了幾種 URI 例子

5.2 URI 格式

圖8—絕對(duì)URI格式

5.2.1 協(xié)議名稱

指訪問資源時(shí)使用哪種協(xié)議類型。

5.2.2 登錄信息認(rèn)證

此為可選項(xiàng)树碱,指定用戶名和密碼作為從服務(wù)器獲取資源的必要登錄信息肯适。

5.2.3 服務(wù)器地址

必須指定,地址可以是域名成榜,也可以是IP地址框舔。

5.2.4 服務(wù)器端口號(hào)

可選項(xiàng),指定服務(wù)器網(wǎng)絡(luò)連接的端口號(hào),不指定使用默認(rèn)的端口號(hào)刘绣。

5.2.5 帶層次的文件路徑

指定服務(wù)器上資源的文件路徑位置樱溉。

5.2.6 查詢字符串

可選項(xiàng),針對(duì)已指定的文件路徑內(nèi)的資源纬凤,可以使用查詢字符串傳入任意參數(shù)福贞。

5.2.7 片段標(biāo)識(shí)符

可選項(xiàng),可以標(biāo)記出已獲取資源中的子資源移斩。

6. 結(jié)語

好了肚医,今天大概了解了一下 HTTP 的歷史,以及一些網(wǎng)絡(luò)基礎(chǔ)向瓷。如果有什么不正確的地方,還請(qǐng)多多指教舰涌。

今天就先到這里吧猖任。以后什么時(shí)候再見還不一定,因?yàn)橛袝r(shí)候懶癌發(fā)作了很難好過來
最后編輯于
?著作權(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)離奇詭異鸡典,居然都是意外死亡源请,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門彻况,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谁尸,“玉大人,你說我怎么就攤上這事纽甘×悸” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵悍赢,是天一觀的道長决瞳。 經(jīng)常有香客問我,道長左权,這世上最難降的妖魔是什么皮胡? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮涮总,結(jié)果婚禮上胸囱,老公的妹妹穿的比我還像新娘。我一直安慰自己瀑梗,他們只是感情好烹笔,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布裳扯。 她就那樣靜靜地躺著,像睡著了一般谤职。 火紅的嫁衣襯著肌膚如雪饰豺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天允蜈,我揣著相機(jī)與錄音冤吨,去河邊找鬼。 笑死饶套,一個(gè)胖子當(dāng)著我的面吹牛漩蟆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妓蛮,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼怠李,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蛤克?” 一聲冷哼從身側(cè)響起捺癞,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎构挤,沒想到半個(gè)月后髓介,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筋现,尸身上長有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
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姻氨。 院中可真熱鬧钓辆,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至似嗤,卻和暖如春啸臀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烁落。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工乘粒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伤塌。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓灯萍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親竟稳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • 個(gè)人認(rèn)為熊痴,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記聂宾,這雖然只是...
    貳零壹柒_fc10閱讀 5,051評(píng)論 0 8
  • 1.這篇文章不是本人原創(chuàng)的,只是個(gè)人為了對(duì)這部分知識(shí)做一個(gè)整理和系統(tǒng)的輸出而編輯成的茶袒,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,037評(píng)論 6 174
  • 1.OkHttp源碼解析(一):OKHttp初階2 OkHttp源碼解析(二):OkHttp連接的"前戲"——HT...
    隔壁老李頭閱讀 20,817評(píng)論 24 176
  • 你把年少裝進(jìn) 積灰的斑駁的馬口鐵盒子 你把廉價(jià)的年少和眼淚一起裝進(jìn) 那盒子里干枯了花瓣和月光 窗欞已逝 寄居何方 ...
    天臺(tái)小蔥閱讀 295評(píng)論 1 5
  • 真實(shí)禍不單行薪寓,這個(gè)月對(duì)我來說是緊張時(shí)期亡资,結(jié)果室友要搬家,我也不得不跟著挪窩向叉,兩天來累煞我也锥腻。真是不愿折騰啊母谎!現(xiàn)總結(jié)...
    橙九九閱讀 892評(píng)論 0 0