摘要:如今每個(gè)瀏覽器發(fā)起的請(qǐng)求都需要攜帶請(qǐng)求元數(shù)據(jù),其中有用戶代理串,緩存指令,等等。如果頭鍵值對(duì)在請(qǐng)求之間無(wú)修改,那么傳遞的開(kāi)銷(xiāo)為字節(jié)。這就是額外開(kāi)銷(xiāo)的不易被察覺(jué)的驚人之處。
如今每個(gè)瀏覽器發(fā)起的請(qǐng)求都需要攜帶請(qǐng)求元數(shù)據(jù),其中有用戶代理串,緩存指令,cookie等等。沒(méi)有壓縮的http head 經(jīng)常需要幾K字節(jié)來(lái)承載才可以。
為了降低這個(gè)開(kāi)銷(xiāo),做了如下的改進(jìn)
定義一個(gè)頭表(head table),在客戶端和服務(wù)器兩端都有,并用于跟蹤每次傳遞的鍵值對(duì)。
在整個(gè)連接期間,head table都持續(xù)存在,增量更新
每個(gè)鍵值對(duì)要么添加到存在的表內(nèi),要么修改之前的值
這樣做了之后,發(fā)送方就可以把當(dāng)前發(fā)送的Request head和head table(上次的request head)對(duì)比,獲知兩者的差異,并且發(fā)送差異;接收方獲得差異,和自己方的head table比對(duì),拼出完整的請(qǐng)求頭。
來(lái)個(gè)例子。
假設(shè)上次傳遞的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: */*
那么,在服務(wù)器和客戶端都在head table 中記錄了第一個(gè)請(qǐng)求的情況下,第二次請(qǐng)求只要發(fā)送一個(gè)多帶帶的path,兩端就可以解析出它本來(lái)的http head。
優(yōu)化的效果下來(lái),特別是對(duì)于公用的、在整個(gè)連接期間很少變化的鍵值對(duì)(user-agent,accept header..)只要傳遞一次。如果頭鍵值對(duì)在請(qǐng)求之間無(wú)修改,那么傳遞的開(kāi)銷(xiāo)為0字節(jié)。
這就是http2引入head table的目的
對(duì)于某些應(yīng)用來(lái)說(shuō),這些開(kāi)銷(xiāo)會(huì)成為瓶頸,比如api驅(qū)動(dòng)的web應(yīng)用:
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來(lái)說(shuō)要小得多。
這就是額外開(kāi)銷(xiāo)的不易被察覺(jué)的驚人之處。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/49564.html
摘要:之壓縮與解壓解壓壓縮壓縮與解壓工具類(lèi)在實(shí)際的應(yīng)用場(chǎng)景中,特別是對(duì)外傳輸數(shù)據(jù)時(shí),將原始數(shù)據(jù)壓縮之后丟出去,可以說(shuō)是非常常見(jiàn)的一個(gè)了,平常倒是沒(méi)有直接使用原生的壓縮工具類(lèi),使用和的機(jī)會(huì)較多正好在實(shí)際的工作場(chǎng)景中遇到了,現(xiàn)在簡(jiǎn)單的看下使用姿 title: 180918-JDK之Deflater壓縮與Inflater解壓tags: JDK categories: Java JDK dat...
摘要:客戶端請(qǐng)求頭聲明瀏覽器支持的壓縮方式,服務(wù)端配置啟用壓縮,壓縮的文件類(lèi)型,壓縮方式。建議設(shè)置成大于的字節(jié)數(shù),小于可能會(huì)越壓越大。 背景 如果你是個(gè)前端開(kāi)發(fā)人員,你肯定知道線上環(huán)境要把js,css,圖片等壓縮,盡量減少文件的大小,提升響應(yīng)速度,特別是對(duì)移動(dòng)端,這個(gè)非常重要。 壓縮 壓縮方式 前端壓縮的方式很多,依賴(lài)java的有ant工具,前端自己打包壓縮的有g(shù)runt,gulp,webp...
摘要:客戶端請(qǐng)求頭聲明瀏覽器支持的壓縮方式,服務(wù)端配置啟用壓縮,壓縮的文件類(lèi)型,壓縮方式。建議設(shè)置成大于的字節(jié)數(shù),小于可能會(huì)越壓越大。 背景 如果你是個(gè)前端開(kāi)發(fā)人員,你肯定知道線上環(huán)境要把js,css,圖片等壓縮,盡量減少文件的大小,提升響應(yīng)速度,特別是對(duì)移動(dòng)端,這個(gè)非常重要。 壓縮 壓縮方式 前端壓縮的方式很多,依賴(lài)java的有ant工具,前端自己打包壓縮的有g(shù)runt,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...
閱讀 3061·2021-11-24 09:39
閱讀 1354·2021-11-02 14:38
閱讀 4422·2021-09-10 11:26
閱讀 2929·2021-08-25 09:40
閱讀 2467·2019-08-30 15:54
閱讀 639·2019-08-30 10:56
閱讀 2946·2019-08-26 12:14
閱讀 3377·2019-08-26 12:13