標籤:pat http agent connect 技術 ip協議 text ade option
原文參考http://mp.weixin.qq.com/s/czx0AHaItrJ-c49XDboIUg HTTP是基於TCP/IP協議的應用程式層協議,規定了用戶端和服務端之間的通訊格式,預設使用80連接埠
1.0版請求格式如下
GET/HTTP/1.0 // 請求命令,必須在尾部添加協議版本(HTTP/1.0)
User-Agent:Mozilla/5.0(Macintosh;Intel Mac OS X 10_10_5) // 描述用戶端情況
Accept:*/* // 用戶端聲明可以接受資料格式
Accept-Encoding: gzip,deflate //用戶端說明自己可以接受哪些壓縮方法
Connection: keep-alive // 要求服務端不要關閉TCP串連,非標準
回應格式如下
HTTP/1.0 200 OK // 協議版本 狀態代碼 狀態原因
Content-Type: text/plain //告訴用戶端資料的格式
Content-Length: 139099
Expires: Thu,05 Dec 1997 16:00:00 GMT
Last-Modified: Wed,5 August 1996 15:55:28 GMT
Server: Apache 0.84
Content-Encoding:gzip // 資料壓縮方法
Connection: keep-alive // 告訴用戶端不關閉TCP串連,非標準
Content-Type的值常見如下
text/plain
text/html
text/css
image/jpeg
image/png
image/svg+xml
audio/mp4
video/mp4
application/javascript
application/pdf
application/zip
application/atom+xml
總稱為MIME type,每個值包括一級類型/二級類型
廠商可以自訂類型
MIME type可以在尾部加參數,如下
Content-Type:text/html;charset=utf-8 // 發送的是網頁編碼是UTF-8
MIME type可以寫在網頁中如下
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
Content-Length: 3456 // 告訴瀏覽器本次回應的長度,後面屬於下一個回應
區分資料包屬於哪一個回應,聲明本次回應的長度
主要缺點:每個TCP串連只能發送一個請求,發送完畢就關閉
HTTP1.1
引入持久串連,即TCP串連預設不關閉,可以被多個請求複用,在一段時間沒有活動後,主動關閉串連。
規範做法用戶端在最後一個請求時發送Connection: close,明確告訴伺服器關閉串連
大多數瀏覽器允許同時建立6個持久串連
管道機制在同一個TCP串連裡面,用戶端可以同時發送多個請求
Transfer-Encoding: chunked // 表明回應將由數量不定的資料區塊組成
每個非空的資料區塊之前會與一個16進位的數值表示塊的長度,最後一個大小為0表示本次回應資料發送完成
例子:
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
3
con
2
wo
0
增加了動詞方法:PUT,PATCH,HEAD,OPTIONS,DELETE
用戶端要求標頭資訊增加Host欄位
Host: www.example.com // 指定伺服器的網域名稱
缺點:資料通訊是按次序進行的,如果碰到回應特別慢後序請求要排隊等著,這就是"隊頭堵塞"
解決方案一減少請求數
方法二多開持久串連
HTTP/2
是一個二進位協議,頭資訊和資料體都是二進位,統稱為幀(frame)包括頭資訊幀和資料幀
多工:在一個串連裡用戶端和瀏覽器同時發送多個請求或回應,不用按照順序一一對應。(即伺服器同時受到a,b兩個請求,先回應a請求發現過程非常耗時,會發送給a已經處理好的部分,然後回應b請求完成後,在發送a剩下部分)
將每個請求或回應的所有資料包稱為一個資料流(stream),都有一個獨一無二的編號,用戶端發出的資料流ID統一為奇數,伺服器發出的ID為偶數
用戶端可以指定資料流的優先順序,優先順序越高伺服器越早回應
引入了頭資訊壓縮機制(header compression),一方面頭資訊使用gzip或compress壓縮後發送,另一方面用戶端和服務端同時維護一張表,所有欄位會存在表裡產生一個索引,只發送索引號
允許未經請求主動向用戶端發送資源即:伺服器推送(server push)
情境:用戶端請求一個網頁裡麵包含很多靜態資源,伺服器預期到用戶端請求頁面後會再請求靜態資源,就主動把這些靜態資源和網頁一起發給用戶端了
HTTP 協議入門-筆記