標簽: http協議
在互聯網時代HTTP協議的重要性無需多言,對于技術崗位的同學們來說理解掌握HTTP協議是必須的。本篇博客就從HTTP協議的演進、特性、重要知識點和工作中常見問題的總結等方面進行簡單的介紹。理解掌握了這些點工作中就OK了,當然在面試中也是少不了的,如果能結合實踐掌握這篇博客的80%應對一般的面試應該是夠了。如果要深入學習HTTP協議的細節請看那本經典的《HTTP權威指南》。
一、HTTP協議的演進
HTTP(HyperText Transfer PRotocol)協議是基于TCP的應用層協議,它不關心數據傳輸的細節,主要是用來規定客戶端和服務端的數據傳輸格式,最初是用來向客戶端傳輸HTML頁面的內容。默認端口是80。
1.HTTP 0.9版本 1991年
這個版本就是最初用來向客戶端傳輸HTML頁面的,所以只有一個GET命令,然后服務器返回客戶端一個HTML頁面,不能是其他格式。利用這個版本完全可以構建一個簡單的靜態網站了。
2.HTTP 1.0版本 1996年
1.0版本是改變比較大的,奠定了現在HTTP協議的基礎。這個版本的協議不僅可以傳輸HTML的文本頁面,還可以傳輸其他二進制文件,例如圖片、視頻。而且還增加了現在常用的POST和HEAD命令。請求消息和響應消息也不是單一的了,規定了一些元數據字段。例如字符集、編碼、狀態響應碼等。
3.HTTP 1.1版本 1997年
實際上是在1.0版本之后半年時間又發布了一個版本,這個版本在1.0版本的基礎上更加完善了。這個版本增加了持久連接,就是說之前版本的協議一次請求就是一次TCP連接,請求完成后這個連接就關閉掉了。眾所周知TCP協議是可靠的,建立連接需要3次握手,斷開連接需要4次揮手,并且TCP有流量控制和擁塞控制,有慢開始機制,剛建立連接時傳輸比較慢,這是比較耗費資源的。一個豐富的頁面會有許多圖片、表單和超鏈接。這樣的話就會有多次的HTTP請求,所以在這個版本上默認不關閉TCP連接也不用聲明Connection: keep-alive字段。如果確實要關閉可以指定Connection: close字段。還引入了管道機制,就是說在一個TCP連接里可以同時發送多個HTTP請求,而不必等待上一個請求響應成功再發送。還增加了PUT、PATCH、HEAD、 OPTIONS、DELETE等命令,豐富了客戶端和服務端交互動作。還增加了Host字段。
4.HTTP 2版本 2015年
這個版本也是隨著互聯網的發展,有了新的需求制定了新的功能還有對上一個版本的完善。1.1版本有了管道機制,但是正在服務端還是要對請求進行排隊處理。這個版本可以多工的處理。還有了頭信息壓縮和服務器的主動推送。
5.HTTPS
HTTPS是HTTP協議的安全版本,HTTP協議的數據傳輸是明文的,是不安全的,HTTPS使用了SSL/TLS協議進行了加密處理。
關于HTTP協議歷史演進的詳細介紹請參考:http://www.ruanyifeng.com/blog/2016/08/http.html
下面介紹沒有特殊說明默認HTTP/1.1版本
二、HTTP協議的特點
1.HTTP協議是無狀態的
就是說每次HTTP請求都是獨立的,任何兩個請求之間沒有什么必然的聯系。但是在實際應用當中并不是完全這樣的,引入了Cookie和session機制來關聯請求。
2.多次HTTP請求
在客戶端請求網頁時多數情況下并不是一次請求就能成功的,服務端首先是響應HTML頁面,然后瀏覽器收到響應之后發現HTML頁面還引用了其他的資源,例如,CSS,JS文件,圖片等等,還會自動發送HTTP請求這些需要的資源。現在的HTTP版本支持管道機制,可以同時請求和響應多個請求,大大提高了效率。
3.基于TCP協議
HTTP協議目的是規定客戶端和服務端數據傳輸的格式和數據交互行為,并不負責數據傳輸的細節。底層是基于TCP實現的。現在使用的版本當中是默認持久連接的,也就是多次HTTP請求使用一個TCP連接。
三、HTTP報文
1.請求報文 
新聞熱點
疑難解答