趣谈HTTP协议中的那些MIME header
HTTP協(xié)議是我們最常使用到的協(xié)議,我們通過瀏覽器上網(wǎng),下載文件,上傳數(shù)據(jù)很多都是使用的它,但是我以前對(duì)它還是懵懵懂懂的,逐漸地,我有些感悟了,所以就記載到這里。本文將盡量使用詼諧的筆法介紹HTTP中的那些mime header field 頭域。
場(chǎng)景一:使用wget來下載一個(gè)源碼包,比如ATS 5.3版本,使用下面的命令:
wget -d "http://mirror.bit.edu.cn/apache/trafficserver/trafficserver-5.3.0.tar.bz2"
我們重點(diǎn)看response header部分:
HTTP/1.1 告訴我們使用的是HTTP協(xié)議的1.1版本,現(xiàn)在HTTP/2已經(jīng)出來了,但是我們見到的還不多;
200 OK 告訴我們響應(yīng)的狀態(tài)碼是200,就是正常返回?cái)?shù)據(jù)了,其它還有很多響應(yīng)碼,比如2xx,3xx,4xx,5xx等等,不細(xì)說了;
Server告訴我們服務(wù)器軟件是Nginx,版本是1.1.9,現(xiàn)在最新版的已經(jīng)到1.8.x了;
Content-Type告訴我們響應(yīng)的數(shù)據(jù)類型,這里是C++源碼,當(dāng)然是application/octet-stream了,其它還有圖片,視頻,json,html,xml之類的;
Content-Length告訴我們r(jià)esponse body的長(zhǎng)度,也就是源碼包的字節(jié)大小;
Date 告訴我們從服務(wù)器獲取該源碼包的時(shí)間,和我目前的時(shí)間差8小時(shí),估計(jì)是時(shí)區(qū)設(shè)置的問題;
Last-Modified 告訴我們,這個(gè)ATS 5.3的源碼包放到服務(wù)器上的時(shí)間,剛好是其對(duì)外發(fā)布時(shí)間;
Connection:告訴我們,C/S直接的連接保持方式,這里的keep-alive表示是保活的,沒有立即斷開,如果還有其它請(qǐng)求,可以重用這里TCP連接;
Accept-Ranges告訴我們從需要的字節(jié)開始接收;
由此可見,這些response header都是很有參考意義的,能給我們提供豐富的信息。
場(chǎng)景二:使用curl通過ATS 5.3下載一個(gè)普通的網(wǎng)頁(yè)文件,使用下面的命令:
curl -o /dev/null -vx 127.0.0.1:8081 ?-H "Accept-Encoding: gzip,deflate,sdch" "http://news.sohu.com"
相同的頭在這里不再重復(fù)了。
Vary告訴我們,對(duì)Accept-Encoding頭的不同值要區(qū)分,來得到不同的document副本,比如gzip壓縮的,deflate壓縮的,沒有壓縮的,這些都是不同的副本;
Cache-Control告訴我們緩存規(guī)則,這里是不要對(duì)document做變換,document的最大存活期是120秒,從緩存獲得該文件開始計(jì)算,超過120s要向服務(wù)器再次驗(yàn)證;
Expires告訴我們,到那個(gè)指定的時(shí)刻,這個(gè)document就是過期的,必須向源站重新請(qǐng)求;
Content-Encoding告訴我們,該document是使用gzip壓縮的;
Age告訴我們,文檔的存活期,剛獲取的文檔,存活期是0;
Proxy-Connection告訴我們,curl和Proxy的網(wǎng)絡(luò)連接是保活的;
Via告訴我們,請(qǐng)求從源站到達(dá)客戶端所經(jīng)過的代理情況,這里只經(jīng)過了一個(gè)代理ATS 5.3,注意后面的緩存情況[cMsSfW]表明是回源獲取的;
X-RS,FSS-Cache是源站自定義頭,不做表述。
將上述請(qǐng)求再重復(fù)幾次,我們得到
我們看到了幾點(diǎn)差異:
Age值有變化,原來是0,現(xiàn)在是8,表明該document在ATS的緩存中存活了8秒,它最大存活期是120秒,對(duì)一個(gè)新聞門戶網(wǎng)站來說,這是合理的,120秒后必須刷新網(wǎng)頁(yè)內(nèi)容;
Via頭中緩存狀態(tài)有變化,現(xiàn)在是[cRs f ],表示是從ATS中的RAM中獲取的熱點(diǎn)內(nèi)容;
場(chǎng)景三:range請(qǐng)求和檢查服務(wù)器是否支持?jǐn)帱c(diǎn)續(xù)傳功能
curl命令行中的-r/--range選項(xiàng)支持向服務(wù)器發(fā)送Range請(qǐng)求,-i選項(xiàng)指定顯示響應(yīng)頭信息
注意返回狀態(tài)碼是206,
Accept-Ranges告訴我們服務(wù)器是否支持指定范圍請(qǐng)求及哪種類型的分段請(qǐng)求,這里是byte
Content-Range告訴我們在整個(gè)返回體中本部分的字節(jié)位置,因?yàn)槲覀冋?qǐng)求的是圖片的前10個(gè)字節(jié),所以Content-Range的值是bytes 0-9/1575,后面的1575是圖片總的字節(jié)數(shù)。
上面是curl獲取到的響應(yīng)頭信息,其中如果能夠找到Content-Range則表明服務(wù)器支持?jǐn)帱c(diǎn)續(xù)傳,有些服務(wù)器還會(huì)返回Accept-Ranges。Nginx服務(wù)器默認(rèn)支持?jǐn)帱c(diǎn)續(xù)傳的,無(wú)須做任何額外配置。
總結(jié)
以上是生活随笔為你收集整理的趣谈HTTP协议中的那些MIME header的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ATS自定义日志中的各字段解读
- 下一篇: 在CentOS 6.3 64bit上安装