超文本傳輸協(xié)議(Hyper Text Transfer Protocol,HTTP)是一個(gè)簡(jiǎn)單的請(qǐng)求-響應(yīng)協(xié)議,它通常運(yùn)行在TCP之上。它指定了客戶端可能發(fā)送給服務(wù)器什么樣的消息以及得到什么樣的響應(yīng)。請(qǐng)求和響應(yīng)消息的頭以ASCII形式給出;而消息內(nèi)容則具有一個(gè)類似MIME的格式。這個(gè)簡(jiǎn)單模型是早期Web成功的有功之臣,因?yàn)樗归_(kāi)發(fā)和部署非常地直截了當(dāng)。
萬(wàn)維網(wǎng)WWW(World Wide Web)發(fā)源于歐洲日內(nèi)瓦量子物理實(shí)驗(yàn)室CERN,正是WWW技術(shù)的出現(xiàn)使得因特網(wǎng)得以超乎想象的速度迅猛發(fā)展。這項(xiàng)基于TCP/IP的技術(shù)在短短的十年時(shí)間內(nèi)迅速成為已經(jīng)發(fā)展了幾十年的Internet上的規(guī)模最大的信息系統(tǒng),它的成功歸結(jié)于它的簡(jiǎn)單、實(shí)用。在WWW的背后有一系列的協(xié)議和標(biāo)準(zhǔn)支持它完成如此宏大的工作,這就是Web協(xié)議族,其中就包括HTTP超文本傳輸協(xié)議。在1990年,HTTP就成為WWW的支撐協(xié)議。當(dāng)時(shí)由其創(chuàng)始人WWW之父蒂姆·貝納斯·李(Tim Berners-Lee)提出,隨后WWW聯(lián)盟(WWW Consortium)成立,組織了IETF(Internet Engineering Task Force)小組進(jìn)一步完善和發(fā)布HTTP。 HTTP是應(yīng)用層協(xié)議,同其他應(yīng)用層協(xié)議一樣,是為了實(shí)現(xiàn)某一類具體應(yīng)用的協(xié)議,并由某一運(yùn)行在用戶空間的應(yīng)用程序來(lái)實(shí)現(xiàn)其功能。HTTP是一種協(xié)議規(guī)范,這種規(guī)范記錄在文檔上,為真正通過(guò)HTTP進(jìn)行通信的HTTP的實(shí)現(xiàn)程序。HTTP是基于B/S架構(gòu)進(jìn)行通信的,而HTTP的服務(wù)器端實(shí)現(xiàn)程序有httpd、nginx等,其客戶端的實(shí)現(xiàn)程序主要是Web瀏覽器,例如Firefox、Internet Explorer、Google Chrome、Safari、Opera等,此外,客戶端的命令行工具還有elink、curl等。Web服務(wù)是基于TCP的,因此為了能夠隨時(shí)響應(yīng)客戶端的請(qǐng)求,Web服務(wù)器需要監(jiān)聽(tīng)在80/TCP端口。這樣客戶端瀏覽器和Web服務(wù)器之間就可以通過(guò)HTTP進(jìn)行通信了。
HTTP是基于客戶/服務(wù)器模式,且面向連接的。典型的HTTP事務(wù)處理有如下的過(guò)程:(1)客戶與服務(wù)器建立連接;(2)客戶向服務(wù)器提出請(qǐng)求;(3)服務(wù)器接受請(qǐng)求,并根據(jù)請(qǐng)求返回相應(yīng)的文件作為應(yīng)答;(4)客戶與服務(wù)器關(guān)閉連接。客戶與服務(wù)器之間的HTTP連接是一種一次性連接,它限制每次連接只處理一個(gè)請(qǐng)求,當(dāng)服務(wù)器返回本次請(qǐng)求的應(yīng)答后便立即關(guān)閉連接,下次請(qǐng)求再重新建立連接。這種一次性連接主要考慮到WWW服務(wù)器面向的是Internet中成千上萬(wàn)個(gè)用戶,且只能提供有限個(gè)連接,故服務(wù)器不會(huì)讓一個(gè)連接處于等待狀態(tài),及時(shí)地釋放連接可以大大提高服務(wù)器的執(zhí)行效率。 [7] HTTP是一種無(wú)狀態(tài)協(xié)議,即服務(wù)器不保留與客戶交易時(shí)的任何狀態(tài)。這就大大減輕了服務(wù)器記憶負(fù)擔(dān),從而保持較快的響應(yīng)速度。HTTP是一種面向?qū)ο蟮膮f(xié)議。允許傳送任意類型的數(shù)據(jù)對(duì)象。它通過(guò)數(shù)據(jù)類型和長(zhǎng)度來(lái)標(biāo)識(shí)所傳送的數(shù)據(jù)內(nèi)容和大小,并允許對(duì)數(shù)據(jù)進(jìn)行壓縮傳送。當(dāng)用戶在一個(gè)HTML文檔中定義了一個(gè)超文本鏈后,瀏覽器將通過(guò)TCP/IP協(xié)議與指定的服務(wù)器建立連接。HTTP支持持久連接,在HTTP / 0.9和1.0中,連接在單個(gè)請(qǐng)求/響應(yīng)對(duì)之后關(guān)閉。在HTTP / 1.1中,引入了保持活動(dòng)機(jī)制,其中連接可以重用于多個(gè)請(qǐng)求。這樣的持久性連接可以明顯減少請(qǐng)求延遲,因?yàn)樵诎l(fā)送第一個(gè)請(qǐng)求之后,客戶端不需要重新協(xié)商TCP 3-Way-Handshake連接。另一個(gè)積極的副作用是,通常,由于TCP的緩慢啟動(dòng)機(jī)制,連接隨著時(shí)間的推移而變得更快。該協(xié)議的1.1版還對(duì)HTTP / 1.0進(jìn)行了帶寬優(yōu)化改進(jìn)。例如,HTTP / 1.1引入了分塊傳輸編碼,以允許流傳輸而不是緩沖持久連接上的內(nèi)容。HTTP流水線進(jìn)一步減少了延遲時(shí)間,允許客戶端在等待每個(gè)響應(yīng)之前發(fā)送多個(gè)請(qǐng)求。協(xié)議的另一項(xiàng)附加功能是字節(jié)服務(wù),即服務(wù)器僅傳輸客戶端明確請(qǐng)求的資源部分。從技術(shù)上講是客戶在一個(gè)特定的TCP端口(端口號(hào)一般為80)上打開(kāi)一個(gè)套接字。如果服務(wù)器一直在這個(gè)周知的端口上傾聽(tīng)連接,則該連接便會(huì)建立起來(lái)。然后客戶通過(guò)該連接發(fā)送一個(gè)包含請(qǐng)求方法的請(qǐng)求塊。HTTP規(guī)范定義了9種請(qǐng)求方法,每種請(qǐng)求方法規(guī)定了客戶和服務(wù)器之間不同的信息交換方式,常用的請(qǐng)求方法是GET和POST。服務(wù)器將根據(jù)客戶請(qǐng)求完成相應(yīng)操作,并以應(yīng)答塊形式返回給客戶,最后關(guān)閉連接。