《http权威指南》阅读笔记(十)
在http請求過程中,可以對實體內容進行編碼
通過content-encoding頭部說明,一般使用 gzip,conpress,deflate,identity
默認是identity,不對實體進行編碼,使用最廣泛的是gzip,主要是用來對內容進行壓縮,減少網絡傳輸的數據
頭部使用accept-encoding來說明客戶端可以那些編碼,可以使用指定多個,說明優先級,編碼之間用;隔開
?
content-type,實體MIME類型 text/html 一般有主類型和子類型,這個可以在MIME中心進行注冊
content-length 這個比較重要,實體的長度,主要是在http1.1中作為數據發送完成的標示
在http1.0中,如果沒有持久化連接,那么服務器端關閉socket連接就說明內容發送完成
在http1.1中,默認是持久化連接,客戶端和服務器端根據content-length來表明數據發送完成,可以發送下一次請求,如果content-length和實際的length不匹配,會帶來嚴重的問題,在http1.1中,如果socket異常關閉了,可以檢測內容發送是否完整
考慮到一種情況,由于需要完全生成好實體內容,才可以計算出來content-length頭部,對于動態內容,很難進行計算,一般都是解析一部分,發送一部分。這樣的話,就必須約定一個實體內容結束標記,取代content-length標簽
可以用transfer-encoding,用在服務器響應報文里面,目前只有分塊chunked 編碼
chunked編碼基本規則:
報文長度
報文內容
CRLF
報文長度
報文內容
CRLF
0
客戶端檢測字節的長度,說明報文發送完成,客戶端可以發起下一次請求
?
multipart/form-data 類型的報文,這個是類似郵件傳送的報文一樣,可以傳送多個部分,通過boundray標記多個部分
?
客戶端可以進行范圍請求
通過頭部Range:4000-10000
說明請求服務器的實體內容從4000字節開始,到第10000字節結束,應該是左閉右開
這個在P2P網絡用的比較多,想一些多線程下載軟件就是這么干的,第一次通過head請求,服務器響應內容長度
客戶端開啟N個線程,用content-length/N進行拆分,進行部分請求,然后在把下載的內容進行組合,終于知道這個原理了
?
還有增量請求,通過條件請求來進行
條件請求頭部:
If-Modified-Since,If-Unmodified-Since,If-Match,If-Not-Match
一般情況下,使用If-Not-Match和Etag請求,增量請求有一般幾種算法。
?
轉載于:https://www.cnblogs.com/aigongsi/archive/2012/10/15/2725082.html
總結
以上是生活随笔為你收集整理的《http权威指南》阅读笔记(十)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 椭圆曲线参数示例
- 下一篇: Objective-C ,ios,iph