看到題目,大家是不是認(rèn)為根據(jù)上一篇(兩萬字長文50+張趣圖帶你領(lǐng)悟網(wǎng)絡(luò)編程的內(nèi)功心法)一樣柒竞,其實不然霹娄,我們上一邊介紹的是網(wǎng)絡(luò)編程的基本功,有了這些基本功之后踩晶,我們就可以在此之上構(gòu)建更加接近實際應(yīng)用的web程序了枕磁。為了快速展示他們的層次關(guān)系,我用幾本書疊了起來進(jìn)行說明茸苇,順便給大家推薦這幾本基本算是這些領(lǐng)域比較權(quán)威的書籍沦寂。如下圖,由下往上看:
- TCP/IP構(gòu)成了網(wǎng)絡(luò)編程的基礎(chǔ)設(shè)施腻暮;
- Socket套接字編程為應(yīng)用層提供了訪問TCP/IP協(xié)議棧的接口毯侦;
- 在應(yīng)用層上面,指定了面向Web編程的HTTP協(xié)議试幽;
- Tomcat是實現(xiàn)HTTP協(xié)議的一個應(yīng)用服務(wù)器卦碾。
在 兩萬字長文50+張趣圖帶你領(lǐng)悟網(wǎng)絡(luò)編程的內(nèi)功心法 一文中起宽,我們詳細(xì)介紹了TCP/IP協(xié)議济榨,從物理層一直講到了應(yīng)用層腿短。在應(yīng)用層可以利用TCP/IP底層的能力绘梦,實現(xiàn)豐富的功能,而本文钝诚,我們就重點講解構(gòu)建在應(yīng)用層上的協(xié)議:HTTP協(xié)議榄棵。
首先,我們來思考一個問題疹鳄,HTTP是怎么來的,為什么要創(chuàng)造HTTP垫蛆,HTTP接下來會怎么發(fā)展呢腺怯?這就得聊聊HTTP的發(fā)展演變史了。
閱讀本文的同時虑乖,我們可以看到整個HTTP的發(fā)展演變史晾虑,可以發(fā)現(xiàn),假設(shè)規(guī)范是一個小伙子佛猛,一般來說坠狡,一個優(yōu)秀的小伙子從來不是出生之后就是優(yōu)秀的,而是隨著業(yè)務(wù)場景婴渡,技術(shù)挑戰(zhàn)的產(chǎn)生,不斷的被拉去勞改哄尔,學(xué)習(xí)柠并,在憂患中蛻變進(jìn)化。所以現(xiàn)在所謂的標(biāo)準(zhǔn)鸣戴、成熟的技術(shù)粘拾,未必符合所有的場景,是技術(shù)的挑戰(zhàn)與創(chuàng)新促成了新事務(wù)的發(fā)展入偷。
(前方高能預(yù)警:此處有篇高考高分作文??...)如果Google只滿足于HTTP/1.1械哟,就不會推出SPDY促進(jìn)HTTP/2的誕生了;如果Google只滿足于SPDY体捏,就不會推出QUIC促進(jìn)HTTP/3的誕生了糯崎;如果快手只滿足于HTTP/1.1,就不會自己實現(xiàn)一套kQUIC了年栓;如果我只滿足于通過HttpClient發(fā)起HTTP調(diào)用薄霜,就不會寫這篇文章了惰瓜。
還記得那個學(xué)術(shù)風(fēng)濃厚的OSI網(wǎng)絡(luò)模型嗎,最終是被TCP/IP給蓋過了風(fēng)頭崎坊。深入應(yīng)用場景,深入業(yè)務(wù)曲尸,挖掘痛點,探索折騰起來吧纽乱。哦對了昆箕,最重要的一點:計算機基礎(chǔ)知識得打牢固鹏倘。
1、HTTP發(fā)展演變史
話不多少第股,我直接畫了一個圖夕吻,總結(jié)一下HTTP的演變史繁仁,一個從誕生之日開始就不斷被勞改的小伙子,一路被互聯(lián)網(wǎng)巨頭和互聯(lián)網(wǎng)標(biāo)準(zhǔn)化組織IETF逐漸帶上正軌的心酸歷史稚矿,它還有很長一段路需要走:
1.1捻浦、時代背景
在HTTP協(xié)議誕生以前朱灿,都有哪些事情的發(fā)生,為其做好了鋪墊呢盗扒?下面來看看侣灶。
接下來,我會請出我們的機器人為我們總結(jié)每個小節(jié)的技術(shù)池户,格式如下:
每個版本的協(xié)議都會有很多特性,這個章節(jié)會把相關(guān)特性或者技術(shù)點描述出來处嫌,但是在發(fā)展演變史這章節(jié)不會細(xì)講斟湃,我們后面會有專門章節(jié)為你揭秘HTTP技術(shù)點的詳細(xì)實現(xiàn)原理。
所以凝赛,本章節(jié)主要是為您梳理HTTP的發(fā)展演變史注暗,知道技術(shù)的來龍去脈,以及接下來的發(fā)展趨勢墓猎。
1.1.1捆昏、ARPANET
ARPANET(Advanced Research Projects Agency Network)是第一個具有分布式控制的廣域分組交換網(wǎng)絡(luò),該網(wǎng)絡(luò)由美國國防部高級研究計劃局建立毙沾。
為了實現(xiàn)對遠(yuǎn)程計算機的訪問骗卜,美國互聯(lián)網(wǎng)先驅(qū) Bob Taylor 在1966年啟動了ARPANET項目,1969年連接了第一臺計算機左胞,在1970年實現(xiàn)了網(wǎng)絡(luò)控制程序寇仓。
關(guān)于為何要搞這樣的技術(shù)烤宙,據(jù)ARPA的總監(jiān)Charles Herzfeld說:因為當(dāng)時美國直郵數(shù)量有限的大型的研究計算機遍烦,而許多應(yīng)該使用這些計算機的研究人員由于地理空間問題導(dǎo)致不能很好使用起來,這使他們感到很挫敗躺枕,所以就提出了這個研究計劃服猪。當(dāng)然也有傳言是處于軍事目的,實現(xiàn)對核力量的控制拐云,改善軍事戰(zhàn)術(shù)和管理決策罢猪。但不管怎樣,網(wǎng)絡(luò)世界從此往前邁進(jìn)了一大步叉瘩。
1.1.2坡脐、TCP/IP
在70年代的時候,基于ARPA網(wǎng)絡(luò)的發(fā)展房揭,研究人員指定了傳輸控制方案备闲,最終演變成了一個協(xié)議,通過該協(xié)議可以將多個單獨的網(wǎng)絡(luò)合成一個網(wǎng)絡(luò)捅暴,這個協(xié)議也就是TCP/IP恬砂。
在1983年UNIX操作系統(tǒng)BSD誕生了,其內(nèi)核就包含了網(wǎng)絡(luò)編程套接字的設(shè)計和實現(xiàn)蓬痒,TCP/IP就這么被BSD帶起來了泻骤,最終逐漸成為了事實的標(biāo)準(zhǔn)。
可以說UNIX套接字聯(lián)網(wǎng)API就是網(wǎng)絡(luò)編程的一個源頭了,所以大學(xué)老師教網(wǎng)絡(luò)編程的時候大概率會推薦這本書:《UNIX網(wǎng)絡(luò)編程 卷1:套接字聯(lián)網(wǎng)API》狱掂,當(dāng)時我們老師也推薦了這本書演痒,雖然當(dāng)時大概率不會細(xì)看,但是遲早會用到的趋惨。
1.1.3鸟顺、OSI參考模型
兩萬字長文50+張趣圖帶你領(lǐng)悟網(wǎng)絡(luò)編程的內(nèi)功心法 一文我們也提到了,為了制定一個統(tǒng)一的計算機網(wǎng)絡(luò)體系器虾,國際標(biāo)準(zhǔn)化組織ISO提出了一個試圖使各種計算機可以在世界范圍內(nèi)互聯(lián)成網(wǎng)的標(biāo)準(zhǔn)框架:OSI/RM(Open System Interconnection Reference Model 開放系統(tǒng)互連基本參考模型)讯嫂。
不過嘛,這個標(biāo)準(zhǔn)是1984年發(fā)布的兆沙,此時TCP/IP已占據(jù)大半江山欧芽,逐漸成為了事實的標(biāo)準(zhǔn),而且OSI更加學(xué)術(shù)葛圃,上一篇文章我們也提到了OSI的一些缺點千扔,導(dǎo)致其不能取代TCP/IP,TCP/IP則是在實踐中得到了驗證库正。
1.1.4曲楚、World Wide Web
好了,萬事具備诀诊,我們離HTTP的誕生越來越接近了。
在1989年阅嘶,英國工程師兼計算機科學(xué)家 Timothy Berners-Lee 在1989年發(fā)明了World Wide Web萬維網(wǎng)属瓣,萬維網(wǎng)是信息時代發(fā)展的核心。他開發(fā)了三種基礎(chǔ)技術(shù):
- URI:統(tǒng)一資源標(biāo)識符讯柔;
- HTML:超文本標(biāo)記語言抡蛙;
- HTTP:超文本傳輸協(xié)議;
是什么促成了 Timothy Berners-Lee 發(fā)明萬維網(wǎng)呢魂迄?在CERN工作的時候粗截,他對查找存儲在不同計算機上的信息所帶來的低效率和困難感到沮喪。于是捣炬,他想CERN管理層提交了一份備忘錄:《信息管理:一項提案》熊昌。逐漸促成了可以在文檔中通過單擊鼠標(biāo)跳轉(zhuǎn)到其他引用的文檔的系統(tǒng)的實現(xiàn),這種呈現(xiàn)形式的文檔被稱為超文本湿酸。
HTTP誕生了婿屹。
1.2、HTTP/0.9
1991年推溃,是一個單純的年代昂利,網(wǎng)上只有文字,看不了圖,看不了片蜂奸。在如此單純的環(huán)境下犁苏,Timothy Berners-Lee設(shè)計了HTTP協(xié)議的0.9版本,為啥不給多個0.1湊個整呢扩所,因為跟我們現(xiàn)在用的HTTP1.1+協(xié)議比起來實在是簡單多了:
- 基于客戶端服務(wù)端的請求響應(yīng)協(xié)議围详;
- 沒有首部;
- 沒有狀態(tài)碼碌奉;
- 只支持純文本短曾,其設(shè)計目標(biāo)是獲取HTML;
- 只支持GET方法赐劣;
- 每次請求都建立新的TCP連接嫉拐;
但是這也是滿足那個純真年代的需求了。保持簡單魁兼,避免過度設(shè)計也好婉徘,為后續(xù)擴展留了個口子。
1.2.1咐汞、報文示例
HTTP/0.9協(xié)議下通過瀏覽器訪問:https://www.itzhai.com/hello-world.html
在建立了TCP連接之后盖呼,最終瀏覽器會發(fā)送報文如下:
GET /hello-world.html
GET后面為什么是資源路徑,而不是URL呢化撕?
因為瀏覽器首先是拿到了URL對應(yīng)的IP地址几晤,然后建立TCP連接,一旦連接到服務(wù)器植阴,就不需要協(xié)議蟹瘾,服務(wù)器,和端口號了掠手。第二節(jié)我們會抓包演示憾朴。
響應(yīng)也非常簡單,僅僅由HTML文件本身組成:
<html>
<body>
welcome to itzhai (www.itzhai.com), wechat account: itread.
</body>
</html>
可以發(fā)現(xiàn):
- 沒有HTTP首部喷鸽,也就意味著只能傳輸HTML文件众雷;
- 沒有狀態(tài)碼:出現(xiàn)問題的時候,只能發(fā)送一個特定的HTML文件做祝,其中包含問題的描述砾省,以供人們解讀錯誤信息。
1.3混槐、HTTP/1.0
人們的欲望是那么的沒有止境呀纯蛾,后來又想在網(wǎng)上看小圖片,又想聽音樂纵隔,不單單只是看文字了翻诉,還想自己寫段子到網(wǎng)上炮姨。這么多需求來了,只能升級HTTP協(xié)議了碰煌。在1996年5月舒岸,HTTP工作組發(fā)布了RFC 1945[1],在該文檔中記錄了許多HTTP/1.0實現(xiàn)的通用方法芦圾,于是HTTP/1.0就誕生了蛾派。
HTTP/1.0跟我現(xiàn)在用的HTTP/1.1比接近了,加了如下概念:
-
增加了首部:
- Allow
- Authorization
- Content-Encoding
- Content-Length
- Content-Type
- Date
- Expires
- From
增加了16個響應(yīng)狀態(tài)碼个少;
引入了重定向洪乍;
-
內(nèi)容編碼(壓縮):
content-coding = "x-gzip" | "x-compress" | token
更多的請求方法:GET,HEAD夜焦,POST壳澳;
傳輸數(shù)據(jù)不限于文本;
更詳細(xì)的內(nèi)容茫经,參考RFC 1945[1]巷波。
但是,HTTP/1.0并不是一個正是規(guī)范或Interger標(biāo)準(zhǔn)卸伞,只是一個已有實踐的參考文檔抹镊,沒有約束力,對當(dāng)時的互聯(lián)網(wǎng)來說沒有太大的推進(jìn)作用荤傲。
另外垮耳,HTTP/1.0也是有很多瑕疵的,比如不能讓多個請求共用一個TCP連接遂黍,缺少強制的Host首部终佛,并且緩存比較控制比較粗糙。
如何復(fù)用TCP連接妓湘?
有些瀏覽器在請求的時候查蓉,會使用一個非標(biāo)準(zhǔn)的Connection字段:
Connection: keep-alive
這個表示客戶端端要求服務(wù)器不要關(guān)閉TCP連接乌询,以便其他請求可以復(fù)用榜贴,服務(wù)器同樣的回應(yīng)這個字段。
1.3.1妹田、報文示例
HTTP/1.0協(xié)議下通過瀏覽器訪問:https://www.itzhai.com/hello-world2.html
請求報文如下所示:
GET /hello-world2.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
Accept: */*
響應(yīng)報文如下所示:
200 OK
Date: Tue, 15 Nov 1996 08:00:00 GMT
Server: Apache 0.84
Content-Type: text/html
<html>
<body>
welcome to itzhai (www.itzhai.com), wechat account: itread.<br/>
<img src="https://www.itzhai.com/resources/images/itzhai_qrcode.jpeg" width="100px">
</body>
</html>
由于瀏覽器拿到響應(yīng)的HTML之后唬党,解析到里面還有一個img圖片請求,于是又發(fā)起了第二個連接獲取圖片:
GET /resources/images/itzhai_qrcode.jpeg HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
響應(yīng)報文如下所示:
200 OK
Date: Tue, 15 Nov 1996 08:00:01 GMT
Server: Apache 0.84
Content-Type: image/jpeg
(image content)
1.4鬼佣、HTTP/1.1
將HTTP轉(zhuǎn)變?yōu)檎降腎ETF Internet標(biāo)準(zhǔn)的工作與圍繞HTTP/1.0文檔編制工作并行進(jìn)行驶拱。
有道是,有競爭才會有進(jìn)步晶衷,微軟在1995年推出的Windows系統(tǒng)中發(fā)布了IE瀏覽器蓝纲,與當(dāng)時的瀏覽器霸主Netscape瀏覽器展開對抗阴孟,IE逐步占有了更多的市場,直到1998年Netscape被AOL收購后税迷,IE的市場還在不斷攀升永丝,在兩大瀏覽器互相廝殺期間,HTTP/1.1誕生了箭养。
在1997年1月慕嚷,發(fā)布了HTTP/1.1的第一個正式標(biāo)準(zhǔn) RFC2068[2]。然后毕泌,在兩年半之后的1999年6月喝检,許多改進(jìn)和更新被納入該標(biāo)準(zhǔn),并以 RFC 2616[3]的形式發(fā)布撼泛。
HTTP/1.1有如下特性:
新增了POTIONS挠说、PUT、DELETE坎弯、TRACE纺涤、CONNECT等新方法;
強化了緩存管理和控制抠忘;
支持維持持久連接撩炊,支持通知服務(wù)器棄用連接;也就是說TCP連接默認(rèn)不關(guān)閉崎脉,可以被多個請求復(fù)用拧咳,不用聲明
Connection: keep-alive
;請求HTML文件的時候要求攜帶編碼囚灼、字符集骆膝、cookie元數(shù)據(jù)等信息;
支持原始HTML請求的分塊響應(yīng)灶体,利于傳輸大文件阅签;
就這樣,一個最穩(wěn)定版本的HTTP協(xié)議誕生了蝎抽,直到現(xiàn)在政钟,仍然有很多網(wǎng)站在使用HTTP/1.1協(xié)議。
在HTTP/1.1期間樟结,涌現(xiàn)了很多互聯(lián)網(wǎng)企業(yè)养交,如,Google瓢宦,騰訊碎连,百度,阿里驮履,淘寶鱼辙,美團頭條等廉嚼。
1.4.1、報文示例
請求報文:
GET /hello-world2.html HTTP/1.1
Host: www.itzhai.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
If-None-Match: "9a3bee90-q1"
If-Modified-Since: Tue, 18 Aug 2020 15:06:33 GMT
響應(yīng)報文:
HTTP/1.1 200 OK
Date: Tue, 18 Aug 2020 15:30:57 GMT
Last-Modified: Tue, 18 Aug 2020 15:06:33 GMT
Content-Type: text/html
Content-Length: 192
ETag: "5f3bee79-c0"
Accept-Ranges: bytes
<html>
<body>
welcome to itzhai (www.itzhai.com), wechat account: itread.<br/>
<img src="https://www.itzhai.com/resources/images/itzhai_qrcode.jpeg" width="200px">
</body>
</html>
HTTP/1.1具體特性說明我們第二節(jié)會講到倒戏。
本文首次發(fā)表于: HTTP發(fā)表演變史 以及公眾號 Java架構(gòu)雜談前鹅,未經(jīng)許可,不得轉(zhuǎn)載峭梳。
1.5舰绘、HTTP/2
當(dāng)然,HTTP/1.1的問題也是很多的葱椭,主要是連接緩慢捂寿,服務(wù)器只能按順序響應(yīng),如果某個請求花了很長時間孵运,就會出現(xiàn)請求隊頭阻塞秦陋,從而影響其他請求。
這個時期出現(xiàn)了很多各式的前端優(yōu)化小技巧治笨,當(dāng)年搞過一段時間前端驳概,也對這些技術(shù)略知一二,如:
- 為了增加并發(fā)請求旷赖,做域名拆分顺又;
- CSS、JS等資源內(nèi)聯(lián)到HTML中,或者進(jìn)行資源合并;
- 生成精靈圖揭斧,一次性傳輸所有小圖標(biāo);
- 資源預(yù)取...
最終果录,為了推進(jìn)從協(xié)議上進(jìn)行優(yōu)化,Google跳出來了咐熙,推出了SPDY協(xié)議弱恒。
1.5.1、SPDY
為啥Google敢推出這樣的協(xié)議呢棋恼,主要還是因為在2008年誕生的Chrome瀏覽器迅速占據(jù)了市場返弹,擁有了大部分用戶,挾天子以令諸侯蘸泻,嘗試推廣新技術(shù)是水到渠成的事情琉苇。
SPDY是Google開發(fā)嘲玫,用于傳輸Web內(nèi)容的協(xié)議悦施,SPDY協(xié)議減少了網(wǎng)頁加載延遲,并且提高了We標(biāo)的安全性去团。
SPDY主要通過幀和首部壓縮抡诞、多路復(fù)用和優(yōu)先級屬性降低等待時間穷蛹。
SPDY誕生之后,很快被整合進(jìn)Chrome和Firefox昼汗,最終被所有主流瀏覽器所采用肴熏,另外服務(wù)器和網(wǎng)絡(luò)代理也對SPDY提供了必要的支持。
SPDY的核心人員后來都參與到了HTTP/2的開發(fā)顷窒,在2015年2月蛙吏,Google宣布最終批準(zhǔn)HTTP/2標(biāo)準(zhǔn)之后,也就不再繼續(xù)支持SPDY協(xié)議了鞋吉,并且最終在Google Chrome 51中刪除了SPDY的支持鸦做。
1.5.2、HTTP/2
HTTP/2又解決了HTTP/1.1面臨的大部分問題谓着,主要有如下功能:
- 使用虛擬的流傳輸消息泼诱,解決了HTTP一個連接中應(yīng)用層的隊頭阻塞的問題;
- 使用了二進(jìn)制協(xié)議赊锚,不再是純文本治筒,避免文本歧義,縮小了請求體積舷蒲;
- 實現(xiàn)了多路復(fù)用耸袜,提高了連接的利用率,在擁塞控制方面有了更好的能力提升牲平;
- 使用HPACK首部壓縮方案壓縮頭部信息句灌,大大節(jié)約了帶寬;
- 增強了安全性欠拾,使用HTTP/2胰锌,要求必須至少用TLS1.2;
- 允許服務(wù)器主動向客戶端推送數(shù)據(jù)藐窄;
1.6资昧、HTTP/3
HTTP/2還在草案的時候,Google又發(fā)現(xiàn)新的問題了荆忍,那就是由于HTTP/2依賴于TCP格带,TCP有什么問題,那么HTTP/2就會存在什么問題刹枉。最主要的問題還是隊頭阻塞問題:隊頭阻塞問題在應(yīng)用層解決了叽唱,但是在TCP協(xié)議層并沒有解決:
- 上一篇文章我們提到過TCP在丟包的時候會進(jìn)行重傳,前面有一個包沒有接收到微宝,就只能把后面的包先放到緩沖區(qū)里面棺亭,應(yīng)用層實際上是無法取數(shù)據(jù)的。也就是說HTTP / 2的多路復(fù)用的并行性對于TCP的丟失恢復(fù)機制不管用蟋软,因此丟失或者重新排序的數(shù)據(jù)報都會導(dǎo)致所有活動事務(wù)陷入停頓镶摘。
為了解決以上問題嗽桩,于是Google發(fā)明了gQUIC(Quick UDP Internet Connection)協(xié)議。
1.6.1凄敢、QUIC
QUIC是最初由Google開發(fā)的一種傳輸層網(wǎng)絡(luò)協(xié)議碌冶,在QUIC協(xié)議中,傳輸層用UDP替換掉了TCP涝缝,并在用戶空間實現(xiàn)了一套擁塞控制算法扑庞,從而避免了TCP的隊頭阻塞問題。
在UDP之上拒逮,QUIC實現(xiàn)了連接管理嫩挤、擁塞窗口、流量控制等消恍。
后來IETF HTTP和QUIC工作組主席Mark Nottingham提出了正式請求岂昭,將HTTP-over-QUIC重命名為HTTP/3。
1.6.2狠怨、HTTP/3
HTTP / 3使用與HTTP/1.1和HTTP/2相同的語義(相同的操作约啊,例如GET和POST)和相同的響應(yīng)代碼(例如200或404),但是使用QUIC傳輸協(xié)議協(xié)議佣赖,以及采用類似于HTTP/2的內(nèi)部成幀層提供HTTP語義的傳輸恰矩。
HTTP/3進(jìn)展如何?
截止到2020年8月憎蛤,HTTP/3協(xié)議已經(jīng)成為Internet草案外傅,并且具有多種實現(xiàn)方案,前1000萬個網(wǎng)站中有6.7%支持HTTP / 3俩檬。在瀏覽器方面萎胰,F(xiàn)irefox和Chrome穩(wěn)定版本都支持HTTP/3,但是默認(rèn)情況下是禁用的棚辽,Safari 14將默認(rèn)啟用HTTP/3技竟。
想進(jìn)一步了解,可以閱讀最新的發(fā)布于2020年8月14日的HTTP/3草案:Hypertext Transfer Protocol Version 3 (HTTP/3)[4]
目前我們使用最廣發(fā)的還是HTTP/1.1屈藐,接下來我就基于HTTP/1.1來介紹下HTTP協(xié)議榔组。
接下來,由于篇幅所限联逻,為了給大家呈現(xiàn)更好的閱讀體驗搓扯,我把后續(xù)的內(nèi)容分為以下章節(jié),深入細(xì)節(jié)更精彩包归,歡迎大家繼續(xù)閱讀:
這篇文章的內(nèi)容就介紹到這里锨推,能夠閱讀到這里的朋友真的是很有耐心,為你點個贊。
本文為arthinking基于相關(guān)技術(shù)資料和官方文檔撰寫而成爱态,確保內(nèi)容的準(zhǔn)確性,如果你發(fā)現(xiàn)了有何錯漏之處境钟,煩請高抬貴手幫忙指正锦担,萬分感激。
如果您覺得讀完本文有所收獲的話慨削,可以關(guān)注我的賬號洞渔,或者點贊吧,碼字不易缚态,您的支持就是我寫作的最大動力磁椒,再次感謝!
為了把相關(guān)系列文章收集起來玫芦,方便后續(xù)查閱浆熔,這里我創(chuàng)建了一個Github倉庫,把發(fā)布的文章按照分類收集起來了桥帆,感興趣的朋友可以Star跟進(jìn):
關(guān)注我的博客IT宅(itzhai.com)
或者公眾號Java架構(gòu)雜談
医增,及時獲取最新的文章。我將持續(xù)更新后端相關(guān)技術(shù)老虫,涉及JVM叶骨、Java基礎(chǔ)、架構(gòu)設(shè)計祈匙、網(wǎng)絡(luò)編程忽刽、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)庫夺欲、算法跪帝、并發(fā)編程、分布式系統(tǒng)等相關(guān)內(nèi)容些阅。
References
- 謝希仁. 計算機網(wǎng)絡(luò)(第6版). 電子工業(yè)出版社.
- TCP/IP詳解 卷1:協(xié)議(原書第2版). 機械工業(yè)出版社.
- UNIX網(wǎng)絡(luò)編程 卷1:套接字聯(lián)網(wǎng)API. 人民郵電出版社
- HTTP權(quán)威指南. 人民郵電出版社
- HTTP/2基礎(chǔ)教程. 人民郵電出版社
- 劉超. 趣談網(wǎng)絡(luò)協(xié)議. 極客時間
- 羅劍鋒. 透視HTTP協(xié)議. 即可時間
本文同步發(fā)表于我的博客IT宅(itzhai.com)和公眾號(Java架構(gòu)雜談)
作者:arthinking | 公眾號:Java架構(gòu)雜談
博客鏈接:https://www.itzhai.com/articles/comprehend-the-underlying-principles-of-web-programming.html
版權(quán)聲明: 版權(quán)歸作者所有歉甚,未經(jīng)許可不得轉(zhuǎn)載,侵權(quán)必究扑眉!聯(lián)系作者請加公眾號纸泄。
-
Hypertext Transfer Protocol -- HTTP/1.0 RFC 1945. Retrieved from https://datatracker.ietf.org/doc/rfc1945/ ? ?
-
HypertextTransferProtocol--HTTP/1.1 2068. Retrieved from https://tools.ietf.org/html/rfc2068 ?
-
Hypertext Transfer Protocol -- HTTP/1.1 2616. Retrieved from https://tools.ietf.org/html/rfc2616 ?
-
Hypertext Transfer Protocol Version 3 (HTTP/3). Retrieved from https://quicwg.org/base-drafts/draft-ietf-quic-http.html ?