HTTP應(yīng)用場景
大家都知道,我們的瀏覽器跟后臺的交互協(xié)議,無論是看新聞,還是刷微博,逛貼吧,買買買,最常見的就是Http協(xié)議,不僅如此,我們很多的App與后臺的交互,也采用HTTP協(xié)議,為什么不采用其他協(xié)議呢?最主要的原因,是HTTP的相關(guān)技術(shù)棧已經(jīng)非常成熟,使用起來也非常方便。

HTTP站在TCP的肩膀上
如果你學(xué)過網(wǎng)絡(luò)分層,就知道HTTP是屬于傳輸層協(xié)議,而TCP是屬于網(wǎng)絡(luò)層協(xié)議,HTTP是建立再TCP之上,所以很多HTTP的性能瓶頸與優(yōu)化技巧都是與TCP息息相關(guān)。TCP在此之間充當(dāng)了什么角色呢?舉個(gè)例子,網(wǎng)絡(luò)的場景是非常復(fù)雜的,可能你從一個(gè)機(jī)器上發(fā)送一個(gè)消息給另外一個(gè)機(jī)器,中間需要經(jīng)過數(shù)十臺機(jī)器與設(shè)備,不可避免地就有可能會發(fā)送失敗,但發(fā)送失敗地時(shí)候,TCP就會負(fù)責(zé)重試,而它地老板"HTTP"就不關(guān)心這些了,他只關(guān)心我讓你干活,還有你最后的結(jié)果,至于中間的場景,那個(gè)是TCP干的事情。
HTTP的歷史
HTTP誕生于1991年,那個(gè)時(shí)候只有一個(gè)GET命令,瀏覽器跟服務(wù)器建立連接之后,服務(wù)器會向客戶端回應(yīng)html格式的字符串,發(fā)送完畢后,就關(guān)閉中間的TCP連接,下次請求需要重新建立連接。
1996年HTTP/1.0版本發(fā)布,因?yàn)橛?jì)算機(jī)與網(wǎng)絡(luò)技術(shù)的提高,人們上網(wǎng)不僅要看文字,還要看圖片,看視頻甚至是下載電腦應(yīng)用,所以HTTP也隨之升級,支持了更多格式,為了支持這些格式,也引入了信息頭,用來描述數(shù)據(jù)與編碼等。
1997年HTTP/1.1發(fā)布,雖然是一個(gè)子版本,但是直到今天還是被廣泛的應(yīng)用,主要是對HTTP/1.0做一些性能上面的優(yōu)化,例如引入持久連接、引入管道機(jī)制,讓客戶端跟服務(wù)端的交互可以更加順暢。
2015年,HTTP/2發(fā)布,再一次提升了性能,并且減少了帶寬浪費(fèi),后面我們會進(jìn)一步進(jìn)行說明。
HTTP包結(jié)構(gòu)

HTTP包主要分為3部分,第一部分是請求行,用來記錄使用什么方法,訪問了什么地址,接著是首部,用來描述包的數(shù)據(jù)類型、編碼格式、是否使用緩存等信息,最后才是實(shí)體,是具體的包內(nèi)容。
一個(gè)HTTP請求的奇妙之旅
那么,一個(gè)HTTP請求時(shí)如何從客戶端到服務(wù)器,最后又回來的呢?當(dāng)客戶端發(fā)起一次HTTP請求的時(shí)候,會把這些數(shù)據(jù)變成一個(gè)流交給TCP層,TCP又會加上源地址跟目標(biāo)地址,然后交給IP層,最后交給數(shù)據(jù)鏈路層,穿過層層交換機(jī)與網(wǎng)關(guān),最后到達(dá)服務(wù)器,服務(wù)器處理完之后,再重新返回給客戶端。

總結(jié)
好了,今天的HTTP的基礎(chǔ)介紹我們就講到這里,如果你有什么疑問或者建議,歡迎評論,歡迎大家關(guān)注我,共同學(xué)習(xí),共同進(jìn)步。大家的支持是我繼續(xù)嘮嗑的動力。同名公眾號(沙茶敏碎碎念)