超文本傳輸協(xié)議(Hyper Text Transfer Protocol,HTTP)是一個簡單的請求-響應(yīng)協(xié)議,它通常運行在TCP之上。它指定了客戶端可能發(fā)送給服務(wù)器什么樣的消息以及得到什么樣的響應(yīng)。請求和響應(yīng)消息的頭以ASCII形式給出;而消息內(nèi)容則具有一個類似MIME的格式。這個簡單模型是早期Web成功的有功之臣,因為它使開發(fā)和部署非常地直截了當(dāng)。
萬維網(wǎng)WWW(World Wide Web)發(fā)源于歐洲日內(nèi)瓦量子物理實驗室CERN,正是WWW技術(shù)的出現(xiàn)使得因特網(wǎng)得以超乎想象的速度迅猛發(fā)展。這項基于TCP/IP的技術(shù)在短短的十年時間內(nèi)迅速成為已經(jīng)發(fā)展了幾十年的Internet上的規(guī)模最大的信息系統(tǒng),它的成功歸結(jié)于它的簡單、實用。在WWW的背后有一系列的協(xié)議和標(biāo)準(zhǔn)支持它完成如此宏大的工作,這就是Web協(xié)議族,其中就包括HTTP超文本傳輸協(xié)議。在1990年,HTTP就成為WWW的支撐協(xié)議。當(dāng)時由其創(chuàng)始人WWW之父蒂姆·貝納斯·李(Tim Berners-Lee)提出,隨后WWW聯(lián)盟(WWW Consortium)成立,組織了IETF(Internet Engineering Task Force)小組進一步完善和發(fā)布HTTP。
HTTP是應(yīng)用層協(xié)議,同其他應(yīng)用層協(xié)議一樣,是為了實現(xiàn)某一類具體應(yīng)用的協(xié)議,并由某一運行在用戶空間的應(yīng)用程序來實現(xiàn)其功能。HTTP是一種協(xié)議規(guī)范,這種規(guī)范記錄在文檔上,為真正通過HTTP進行通信的HTTP的實現(xiàn)程序。HTTP是基于B/S架構(gòu)進行通信的,而HTTP的服務(wù)器端實現(xiàn)程序有httpd、nginx等,其客戶端的實現(xiàn)程序主要是Web瀏覽器,例如Firefox、Internet Explorer、Google Chrome、Safari、Opera等,此外,客戶端的命令行工具還有elink、curl等。Web服務(wù)是基于TCP的,因此為了能夠隨時響應(yīng)客戶端的請求,Web服務(wù)器需要監(jiān)聽在80/TCP端口。這樣客戶端瀏覽器和Web服務(wù)器之間就可以通過HTTP進行通信了。
HTTP誕生之初主要是應(yīng)用于WEB端內(nèi)容獲取,那時候內(nèi)容還不像現(xiàn)在這樣豐富,排版也沒那么精美,用戶交互的場景幾乎沒有。對于這種簡單的獲取網(wǎng)頁內(nèi)容的場景,HTTP表現(xiàn)得還算不錯。但隨著互聯(lián)網(wǎng)的發(fā)展和WEB2.0的誕生,更多的內(nèi)容開始被展示(更多的圖片文件),排版變得更精美(更多的CSS),更復(fù)雜的交互也被引入(更多的JS)。用戶打開一個網(wǎng)站首頁所加載的數(shù)據(jù)總量和請求的個數(shù)也在不斷增加。今天絕大部分的門戶網(wǎng)站首頁大小都會超過2M,請求數(shù)量可以多達100個。另一個廣泛的應(yīng)用是在移動互聯(lián)網(wǎng)的客戶端app,不同性質(zhì)的app對HTTP的使用差異很大。對于電商類app,加載首頁的請求也可能多達10多個。對于微信這類IM,HTTP請求可能僅限于語音和圖片文件的下載,請求出現(xiàn)的頻率并不算高。
HTTP報文由從客戶機到服務(wù)器的請求和從服務(wù)器到客戶機的響應(yīng)構(gòu)成。請求報文格式如下:
請求行 - 通用信息頭 - 請求頭 - 實體頭 - 報文主體
請求行以方法字段開始,后面分別是URL字段和HTTP協(xié)議版本字段,并以CRLF結(jié)尾。SP是分隔符。除了在最后的CRLF序列中CF和LF是必需的之外,其他都可以不要。有關(guān)通用信息頭,請求頭和實體頭方面的具體內(nèi)容可以參照相關(guān)文件。
應(yīng)答報文格式如下:
狀態(tài)行 - 通用信息頭 - 響應(yīng)頭 - 實體頭 - 報文主體
狀態(tài)碼元由3位數(shù)字組成,表示請求是否被理解或被滿足。原因分析是對原文的狀態(tài)碼作簡短的描述,狀態(tài)碼用來支持自動操作,而原因分析用來供用戶使用??蛻魴C無需用來檢查或顯示語法。有關(guān)通用信息頭,響應(yīng)頭和實體頭方面的具體內(nèi)容可以參照相關(guān)文件。