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