日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

HTTP头信息中的参数Etag

發(fā)布時(shí)間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTP头信息中的参数Etag 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
服務(wù)器如果是集群,不同服務(wù)器返回的 Http Header 中的 Etag 參數(shù)不一樣。如果是圖片是程序生成的,我們可以用 no-cache 這些 header 來控制,但如果這些圖片是 apache 或 nginx 等呢?
下面開始介紹 Etag:


?????? Etag在HTTP1.1中有介紹,主要的作用就是在(css file, image, javascript file)文件后面添加一個(gè)唯一的參數(shù)(相當(dāng)于查詢參數(shù)字符串),Etag有服務(wù)器端生成,并且隨著文件的改變而改變,這樣瀏覽器端就會(huì)只重新請(qǐng)求獲取 Etag發(fā)生變化的文件,減少瀏覽器端數(shù)據(jù)的流量,加快瀏覽器的反應(yīng)速度,重要的是減輕服務(wù)器端的壓力,所以服務(wù)器端Etag的實(shí)現(xiàn)就比較重要了。

現(xiàn)在我們有個(gè)問題為什么要使用Etag呢?

Etag主要為了解決Last-Modified無法解決的一些問題.他能比Last_Modified更加精確的知道文件是否被修改過.如果有個(gè)文件修改非常頻繁,比如在秒以下的時(shí)間內(nèi)進(jìn)行修改,比如1秒內(nèi)修改了10次,If-Modified-Since能檢查只能秒級(jí)的修改,所以這種修改無法判斷.原因是UNIX記錄MTIME只能精確到秒.所以我們選擇生成Etag,因?yàn)镋tag可以綜合Inode,MTime和Size,可以避免這個(gè)問題.

Etag的工作原理
Etag在服務(wù)器上生成后,客戶端通過If-Match或者說If-None-Match這個(gè)條件判斷請(qǐng)求來驗(yàn)證資源是否修改。我們常見的是使用If-None-Match.請(qǐng)求一個(gè)文件的流程可能如下:
新的請(qǐng)求
客戶端發(fā)起HTTP GET請(qǐng)求一個(gè)文件(css ,image,js);服務(wù)器處理請(qǐng)求,返回文件內(nèi)容和一堆Header(包括Etag,例如"2e681a-6-5d044840"),http頭狀態(tài)碼為為200.

同一個(gè)用戶第二次這個(gè)文件的請(qǐng)求
客戶端在一次發(fā)起HTTP GET請(qǐng)求一個(gè)文件,注意這個(gè)時(shí)候客戶端同時(shí)發(fā)送一個(gè)If-None-Match頭,這個(gè)頭中會(huì)包括上次這個(gè)文件的Etag(例如"2e681a- 6-5d044840"),這時(shí)服務(wù)器判斷發(fā)送過來的Etag和自己計(jì)算出來的Etag,因此If-None-Match為False,不返回200,返回304,客戶端繼續(xù)使用本地緩存;

注意.服務(wù)器又設(shè)置了Cache-Control:max-age和Expires時(shí),會(huì)同時(shí)使用,也就是說在完全匹配If-Modified-Since和If-None-Match即檢查完修改時(shí)間和Etag之后,服務(wù)器才能返回304.

下面是在Apache中的Etag的配置

在Apache中設(shè)置Etag的支持比較簡(jiǎn)單,只需要在apache的配置中加入下面的內(nèi)容就可以了:

FileETag MTime Size

注解:FileETag指令配置了當(dāng)文檔是基于一個(gè)文件時(shí)用以創(chuàng)建ETag(實(shí)體標(biāo)簽)應(yīng)答頭的文件的屬性(ETag的值用于進(jìn)行緩沖管理以節(jié)約網(wǎng)絡(luò)帶寬)。ETag的值由文件的inode(索引節(jié)點(diǎn))、大小、最后修改時(shí)間決定。FileETag指令可以讓您選擇(如果您想進(jìn)行選擇)這其中哪些要素將被使用。主要關(guān)鍵字如下:

INode
文件的索引節(jié)點(diǎn)(inode)數(shù)
MTime
文件的最后修改日期及時(shí)間
Size
文件的字節(jié)數(shù)
All
所有存在的域,等價(jià)于:FileETag INode MTime Size
None
如果一個(gè)文檔是基于文件的,則不在應(yīng)答中包含任何ETag頭

在大型多WEB集群時(shí),使用ETag時(shí)有問題,所以有人建議使用WEB集群時(shí)不要使用ETag,其實(shí)很好解決, 因?yàn)槎喾?wù)器時(shí),INode不一樣,所以不同的服務(wù)器生成的ETag不一樣,所以用戶有可能重復(fù)下載(這時(shí)ETag就會(huì)不準(zhǔn)),明白了上面的原理和設(shè)置后,解決方法也很容易,讓ETag后面二個(gè)參數(shù),MTime和Size就好了.只要ETag的計(jì)算沒有INode參與計(jì)算,就會(huì)很準(zhǔn)了.

如果動(dòng)態(tài)程序要生成ETAG 也很簡(jiǎn)單,如: $etag = ‘”‘ . md5($body) . ‘”‘;

總結(jié)

以上是生活随笔為你收集整理的HTTP头信息中的参数Etag的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。