室友三次面試字節,考了兩次,自己也不會,所以就總結總結。
http0.9
最初的http版本,僅支持get方法,只能傳輸純文本內容,所以請求結束服務段會給客戶端返回一個HTML格式的字符串,然后由瀏覽器自己渲染。
http0.9是典型的無狀態連接(無狀態是指協議對於事務處理沒有記憶功能,對同一個url請求沒有上下文關系,每次的請求都是獨立的,服務器中沒有保存客戶端的狀態)
http1.0
這個版本后任何文件形式都可以被傳輸,本質上支持長連接,但是默認還是短連接,增加了keep-alive關鍵字來由短鏈接變成長連接。
HTTP的請求和回應格式也發生了變化,除了要傳輸的數據之外,每次通信都包含頭信息,用來描述一些信息。
還增加了狀態碼(status code)、多字符集支持、多部分發送(multi-part type)、權限(authorization)、緩存(cache)、內容編碼(content encoding)等
http1.1
HTTP1.1最大的變化就是引入了長鏈接,也就是TCP鏈接默認是不關閉的可以被多個請求復用。客戶端或者服務器如果長時間發現對方沒有活動就會關閉鏈接,但是規范的做法是客戶端在最后一個請求的時候要求服務器關閉鏈接。對於同一個域名,目前瀏覽器支持建立6個長鏈接。
節約帶寬,HTTP1.1支持只發送header頭信息不帶任何body信息,如果服務器認為客戶端有權限請求指定數據那就返回100,沒有就返回401,當客戶端收到100的時候可以才把要請求的信息發給服務器。並且1.1還支持了請求部分內容,如果當前客戶端已經有一部分資源了,只需要向服務器請求另外的部分資源即可,這也是支持文件斷點續傳的基礎。
1.1版本中增加了host處理,在HTTP1.0中認為每台服務器都綁定一個唯一的ip地址,因此在URL中並沒有傳遞主機名,但是隨着虛擬機技術的發展,可能在一台物理機器上存在多個虛擬主機,並且他們共享了一個ip地址,http1.1中請求消息和響應消息都支持host頭域,如果不存在還會報出錯誤
http2.0
多路復用:在一個連接里面並發處理請求,不像http1.1在一個tcp連接中各個請求是串行的。花銷很大
在1.0版本后增加了header頭信息,2.0版本通過算法把header進行了壓縮這樣數據體積就更小,在網絡上傳輸就更快。
服務端有了推送功能,將客戶端感興趣的東西推給客戶端,當客戶端請求這些時,直接去緩存中取就行。
