http版本號
阿新 • • 發佈:2020-08-04
一. 描述HTTP#
CopyOSI協議層次: 應用層協議
作用: 規範瀏覽器之見資訊傳遞.
埠: 80
二. Http的版本演化#
1. http 0.9
Copy
最初的版本,只有一個命令GET,伺服器只能迴應HTML格式字串。
2. http 1.0#
Copy引入了新的命令POST和HEAD(http資料頭部)命令 每個TCP連線只能傳送一個請求,傳送資料完畢,連線就關閉,如果還要請求其他資源,就必須再新建一個連線 頭資訊是 ASCII 碼,後面資料可為任何格式。伺服器迴應時會告訴客戶端,資料是什麼格式,即Content-Type欄位的作用。這些資料型別總稱為MIME即多用途網際網路郵件擴充套件,每個值包括一級型別和二級型別,預定義的型別,也可自定義型別, 常見Content-Type值:text/xml image/jpeg audio/mp3
3. http 1.1
Copy
新增方法:PUT、PATCH、OPTIONS、DELETE
引入了持久連線(persistent connection),即TCP連線預設不關閉,可以被多個請求複用,不用宣告Connection: keep-alive。對於同一個域名,大多數瀏覽器允許同時建立6個持久連線引入了管道機制,即在同一個TCP連線裡,客戶端可以同時傳送多個請求,進一步改進了HTTP協議的效率
同一個TCP連線裡,所有的資料通訊是按次序進行的。伺服器只能順序處理迴應,前面的迴應慢,會有許多請求排隊,造成"隊頭堵塞"(Head-of-line blocking)
為避免上述問題,兩種方法:一是減少請求數,二是同時多開持久連線
沒有解決的問題:
Copy1.傳輸資料是明文
2.header頭部資料太長
3.每次傳輸還是要重新連線
4.server不能主動push
4. Http2.0
Copy
HTTP2.0是SPDY(谷歌公司研發的https的一種協議)的升級版
1.頭資訊和資料體都是二進位制,稱為頭資訊幀和資料幀
2.複用TCP連線,在一個連線裡,客戶端和瀏覽器都可以同時傳送多個請求或迴應,且不用按順序一一對應,避免了“隊頭堵塞“,此雙向的實時通訊稱為多工(Multiplexing)
3.引入頭資訊壓縮機制(header compression),頭資訊使用gzip或compress壓縮後再發送;客戶端和伺服器同時維護一張頭資訊表,所有欄位都會存入這個表,生成一個索引號,不傳送同樣欄位,只發送索引號,提高速度
4. HTTP/2 允許伺服器未經請求,主動向客戶端傳送資源,即伺服器推送(server push)
三. http1.0和http1.1的區別(面試題)
1. 長連線
Copy
HTTP 1.1支援長連線(PersistentConnection)和請求的流水線(Pipelining)處理,在一個TCP連線上可以傳送多個HTTP請求和響應,減少了建立和關閉連線的消耗和延遲,在HTTP1.1中預設開啟Connection: keep-alive,彌補了HTTP1.0每次請求都要建立連線的缺點
2. 快取處理
Copy
在HTTP1.0中主要使用header裡的If-Modified-Since,Expires來做為快取判斷的標準,HTTP1.1則引入了更多的快取控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的快取頭來控制快取策略
3. 頻寬優化和網路連線的使用
Copy
HTTP1.0中,存在一些浪費頻寬的現象,例如:客戶端只是需要某個物件的一部分,而伺服器卻將整個物件送過來了,並且不支援斷點續傳功能,HTTP1.1則在請求頭引入了range頭域,它允許只請求資源的某個部分,即返回碼是206(Partial Content),方便了開發者自由的選擇以便於充分利用頻寬和連線
4. 錯誤通知的管理
Copy
在HTTP1.1中新增24個狀態響應碼,如
409(Conflict)表示請求的資源與資源當前狀態衝突;.
410(Gone)表示伺服器上的某個資源被永久性的刪除
5. Host頭處理
Copy
在HTTP1.0中認為每臺伺服器都繫結一個唯一的IP地址,因此,請求訊息中的URL並沒有傳遞主機名(hostname)。但隨著虛擬主機技術的發展,在一臺物理伺服器上可以存在多個虛擬主機(Multi-homed Web Servers),並且它們共享一個IP地址。HTTP1.1的請求訊息和響應訊息都應支援Host頭域,且請求訊息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)