0.90.9協(xié)議是適用于各種數(shù)據(jù)信息的簡(jiǎn)潔快速協(xié)議,但是遠(yuǎn)不能滿足日益發(fā)展的各種應(yīng)用的需要。0.9協(xié)議就是一個(gè)交換信息的無(wú)序協(xié)議,僅僅限于文字。由于無(wú)法進(jìn)行內(nèi)容的協(xié)商,在雙發(fā)的握手和協(xié)議中,并有規(guī)定雙發(fā)的內(nèi)容是什么,也就是圖片是無(wú)法顯示和處理的。
1.0到了1.0協(xié)議階段,也就是在1982年,Tim Berners-Lee提出了HTTP/1.0。在此后的不斷豐富和發(fā)展中,HTTP/1.0成為最重要的面向事務(wù)的應(yīng)用層協(xié)議。該協(xié)議對(duì)每一次請(qǐng)求/響應(yīng)建立并拆除一次連接。其特點(diǎn)是簡(jiǎn)單、易于管理,所以它符合了大家的需要,得到了廣泛的應(yīng)用。
1.1在1.0協(xié)議中,雙方規(guī)定了連接方式和連接類(lèi)型,這已經(jīng)極大擴(kuò)展了HTTP的領(lǐng)域,但對(duì)于互聯(lián)網(wǎng)最重要的速度和效率,并沒(méi)有太多的考慮。畢竟,作為協(xié)議的制定者,當(dāng)時(shí)也沒(méi)有想到HTTP會(huì)有那么快的普及速度。 [3] 關(guān)于HTTP1.1協(xié)議的具體內(nèi)容可以參考RFC 2616。
2.0HTTP2.0的前身是HTTP1.0和HTTP1.1。雖然之前僅僅只有兩個(gè)版本,但這兩個(gè)版本所包含的協(xié)議規(guī)范之龐大,足以讓任何一個(gè)有經(jīng)驗(yàn)的工程師為之頭疼。網(wǎng)絡(luò)協(xié)議新版本并不會(huì)馬上取代舊版本。實(shí)際上,1.0和1.1在之后很長(zhǎng)的一段時(shí)間內(nèi)一直并存,這是由于網(wǎng)絡(luò)基礎(chǔ)設(shè)施更新緩慢所決定的。關(guān)于HTTP2.0協(xié)議的具體內(nèi)容可以參考RFC 7540。
HTTP誕生之初主要是應(yīng)用于WEB端內(nèi)容獲取,那時(shí)候內(nèi)容還不像現(xiàn)在這樣豐富,排版也沒(méi)那么精美,用戶(hù)交互的場(chǎng)景幾乎沒(méi)有。對(duì)于這種簡(jiǎn)單的獲取網(wǎng)頁(yè)內(nèi)容的場(chǎng)景,HTTP表現(xiàn)得還算不錯(cuò)。但隨著互聯(lián)網(wǎng)的發(fā)展和WEB2.0的誕生,更多的內(nèi)容開(kāi)始被展示(更多的圖片文件),排版變得更精美(更多的CSS),更復(fù)雜的交互也被引入(更多的JS)。用戶(hù)打開(kāi)一個(gè)網(wǎng)站首頁(yè)所加載的數(shù)據(jù)總量和請(qǐng)求的個(gè)數(shù)也在不斷增加。今天絕大部分的門(mén)戶(hù)網(wǎng)站首頁(yè)大小都會(huì)超過(guò)2M,請(qǐng)求數(shù)量可以多達(dá)100個(gè)。另一個(gè)廣泛的應(yīng)用是在移動(dòng)互聯(lián)網(wǎng)的客戶(hù)端app,不同性質(zhì)的app對(duì)HTTP的使用差異很大。對(duì)于電商類(lèi)app,加載首頁(yè)的請(qǐng)求也可能多達(dá)10多個(gè)。對(duì)于微信這類(lèi)IM,HTTP請(qǐng)求可能僅限于語(yǔ)音和圖片文件的下載,請(qǐng)求出現(xiàn)的頻率并不算高。
在WWW中,“客戶(hù)”與“服務(wù)器”是一個(gè)相對(duì)的概念,只存在于一個(gè)特定的連接期間,即在某個(gè)連接中的客戶(hù)在另一個(gè)連接中可能作為服務(wù)器?;贖TTP的客戶(hù)/服務(wù)器模式的信息交換過(guò)程,它分四個(gè)過(guò)程:建立連接、發(fā)送請(qǐng)求信息、發(fā)送響應(yīng)信息、關(guān)閉連接。
HTTP是基于請(qǐng)求/響應(yīng)范式的。一個(gè)客戶(hù)機(jī)與服務(wù)器建立連接后,發(fā)送一個(gè)請(qǐng)求給服務(wù)器,請(qǐng)求方式的格式為,統(tǒng)一資源標(biāo)識(shí)符、協(xié)議版本號(hào),后邊是MIME信息包括請(qǐng)求修飾符、客戶(hù)機(jī)信息和可能的內(nèi)容。服務(wù)器接到請(qǐng)求后,給予相應(yīng)的響應(yīng)信息,其格式為一個(gè)狀態(tài)行包括信息的協(xié)議版本號(hào)、一個(gè)成功或錯(cuò)誤的代碼,后邊是MIME信息包括服務(wù)器信息、實(shí)體信息和可能的內(nèi)容。其實(shí)簡(jiǎn)單說(shuō)就是任何服務(wù)器除了包括HTML文件以外,還有一個(gè)HTTP駐留程序,用于響應(yīng)用戶(hù)請(qǐng)求。你的瀏覽器是HTTP客戶(hù),向服務(wù)器發(fā)送請(qǐng)求,當(dāng)瀏覽器中輸入了一個(gè)開(kāi)始文件或點(diǎn)擊了一個(gè)超級(jí)鏈接時(shí),瀏覽器就向服務(wù)器發(fā)送了HTTP請(qǐng)求,此請(qǐng)求被送往由IP地址指定的URL。駐留程序接收到請(qǐng)求,在進(jìn)行必要的操作后回送所要求的文件。在這一過(guò)程中,在網(wǎng)絡(luò)上發(fā)送和接收的數(shù)據(jù)已經(jīng)被分成一個(gè)或多個(gè)數(shù)據(jù)包(packet),每個(gè)數(shù)據(jù)包包括:要傳送的數(shù)據(jù);控制信息,即告訴網(wǎng)絡(luò)怎樣處理數(shù)據(jù)包。TCP/IP決定了每個(gè)數(shù)據(jù)包的格式。如果事先不告訴你,你可能不會(huì)知道信息被分成用于傳輸和再重新組合起來(lái)的許多小塊。許多HTTP通訊是由一個(gè)用戶(hù)代理初始化的并且包括一個(gè)申請(qǐng)?jiān)谠捶?wù)器上資源的請(qǐng)求。最簡(jiǎn)單的情況可能是在用戶(hù)代理(UA)和源服務(wù)器(O)之間通過(guò)一個(gè)單獨(dú)的連接來(lái)完成。當(dāng)一個(gè)或多個(gè)中介出現(xiàn)在請(qǐng)求/響應(yīng)鏈中時(shí),情況就變得復(fù)雜一些。中介有三種:代理(Proxy)、網(wǎng)關(guān)(Gateway)和通道(Tunnel)。一個(gè)代理根據(jù)URI的絕對(duì)格式來(lái)接受請(qǐng)求,重寫(xiě)全部或部分消息,通過(guò)URI的標(biāo)識(shí)把已格式化過(guò)的請(qǐng)求發(fā)送到服務(wù)器。網(wǎng)關(guān)是一個(gè)接收代理,作為一些其它服務(wù)器的上層,并且如果必須的話,可以把請(qǐng)求翻譯給下層的服務(wù)器協(xié)議。一個(gè)通道作為不改變消息的兩個(gè)連接之間的中繼點(diǎn)。當(dāng)通訊需要通過(guò)一個(gè)中介(例如:防火墻等)或者是中介不能識(shí)別消息的內(nèi)容時(shí),通道經(jīng)常被使用。