摘要:如今每個瀏覽器發起的請求都需要攜帶請求元數據,其中有用戶代理串,緩存指令,等等。如果頭鍵值對在請求之間無修改,那么傳遞的開銷為字節。這就是額外開銷的不易被察覺的驚人之處。
如今每個瀏覽器發起的請求都需要攜帶請求元數據,其中有用戶代理串,緩存指令,cookie等等。沒有壓縮的http head 經常需要幾K字節來承載才可以。
為了降低這個開銷,做了如下的改進
定義一個頭表(head table),在客戶端和服務器兩端都有,并用于跟蹤每次傳遞的鍵值對。
在整個連接期間,head table都持續存在,增量更新
每個鍵值對要么添加到存在的表內,要么修改之前的值
這樣做了之后,發送方就可以把當前發送的Request head和head table(上次的request head)對比,獲知兩者的差異,并且發送差異;接收方獲得差異,和自己方的head table比對,拼出完整的請求頭。
來個例子。
假設上次傳遞的http head:
method:get path:/1 scheme:https user-agent: curl/7.28.1 host: www.gravatar.com Accept: */*
本次傳遞的http head:
method:get path:/2 scheme:https user-agent: curl/7.28.1 host: www.gravatar.com Accept: */*
那么,在服務器和客戶端都在head table 中記錄了第一個請求的情況下,第二次請求只要發送一個多帶帶的path,兩端就可以解析出它本來的http head。
優化的效果下來,特別是對于公用的、在整個連接期間很少變化的鍵值對(user-agent,accept header..)只要傳遞一次。如果頭鍵值對在請求之間無修改,那么傳遞的開銷為0字節。
這就是http2引入head table的目的
對于某些應用來說,這些開銷會成為瓶頸,比如api驅動的web應用:
visit:
http://ip.jsontest.com/?callback=showMyIP
Requst header
GET http://ip.jsontest.com/?callback=showMyIP HTTP/1.1 Host: ip.jsontest.com Proxy-Connection: keep-alive Cache-Control: max-age=0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2 RA-Ver: 2.8.9 RA-Sid: DDED9CF3-20140806-053044-2b1b59-a2635f
query string:
callback=showMyIP
Response head:
HTTP/1.1 200 OK Access-Control-Allow-Origin: * Content-Type: application/javascript; charset=ISO-8859-1 Content-Encoding: gzip Vary: Accept-Encoding Date: Mon, 23 Mar 2015 07:44:50 GMT Server: Google Frontend Cache-Control: private Content-Length: 52 Alternate-Protocol: 80:quic,p=0.5,80:quic,p=0.5
Respone:
showMyIP({"ip": "45.56.92.8"});
作為Respone的json比起Header來說要小得多。
這就是額外開銷的不易被察覺的驚人之處。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/49564.html
摘要:之壓縮與解壓解壓壓縮壓縮與解壓工具類在實際的應用場景中,特別是對外傳輸數據時,將原始數據壓縮之后丟出去,可以說是非常常見的一個了,平常倒是沒有直接使用原生的壓縮工具類,使用和的機會較多正好在實際的工作場景中遇到了,現在簡單的看下使用姿 title: 180918-JDK之Deflater壓縮與Inflater解壓tags: JDK categories: Java JDK dat...
摘要:客戶端請求頭聲明瀏覽器支持的壓縮方式,服務端配置啟用壓縮,壓縮的文件類型,壓縮方式。建議設置成大于的字節數,小于可能會越壓越大。 背景 如果你是個前端開發人員,你肯定知道線上環境要把js,css,圖片等壓縮,盡量減少文件的大小,提升響應速度,特別是對移動端,這個非常重要。 壓縮 壓縮方式 前端壓縮的方式很多,依賴java的有ant工具,前端自己打包壓縮的有grunt,gulp,webp...
摘要:客戶端請求頭聲明瀏覽器支持的壓縮方式,服務端配置啟用壓縮,壓縮的文件類型,壓縮方式。建議設置成大于的字節數,小于可能會越壓越大。 背景 如果你是個前端開發人員,你肯定知道線上環境要把js,css,圖片等壓縮,盡量減少文件的大小,提升響應速度,特別是對移動端,這個非常重要。 壓縮 壓縮方式 前端壓縮的方式很多,依賴java的有ant工具,前端自己打包壓縮的有grunt,gulp,webp...
String Compression Implement a method to perform basic string compression using the counts of repeated characters. For example, the string aabcccccaaa would become a2b1c5a3. If the compressed string w...
閱讀 2905·2021-11-24 09:39
閱讀 1165·2021-11-02 14:38
閱讀 4158·2021-09-10 11:26
閱讀 2748·2021-08-25 09:40
閱讀 2310·2019-08-30 15:54
閱讀 482·2019-08-30 10:56
閱讀 2745·2019-08-26 12:14
閱讀 3217·2019-08-26 12:13