狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

服務(wù)器網(wǎng)頁(yè)緩存的深入分析

admin
2010年8月13日 18:22 本文熱度 4684
Expires、Cache-Control、Last-Modified、ETag是RFC 2616(HTTP/1.1)協(xié)議中和網(wǎng)頁(yè)緩存相關(guān)的幾個(gè)字段。前兩個(gè)用來(lái)控制緩存的失效日期,后兩個(gè)用來(lái)驗(yàn)證網(wǎng)頁(yè)的有效性。要注意的是, HTTP/1.0有一個(gè)功能比較弱的緩存控制機(jī)制:Pragma,使用HTTP/1.0的緩存將忽略Expires和Cache-Control頭。我們這里以Apache2.0服務(wù)器為例,只討論HTTP/1.1協(xié)議。
Expires

    Expires字段聲明了一個(gè)網(wǎng)頁(yè)或URL地址不再被瀏覽器緩存的時(shí)間,一旦超過(guò)了這個(gè)時(shí)間,瀏覽器都應(yīng)該聯(lián)系原始服務(wù)器。RFC告訴我們:“由于推斷的失效時(shí)間也許會(huì)降低語(yǔ)義透明度,應(yīng)該被謹(jǐn)慎使用,同時(shí)我們鼓勵(lì)原始服務(wù)器盡可能提供確切的失效時(shí)間?!?/DIV>
    對(duì)于一般的純靜態(tài)頁(yè)面,如html、gif、jpg、css、js,默認(rèn)安裝的Apache服務(wù)器,不會(huì)在響應(yīng)頭添加這個(gè)字段。Firefox瀏覽器接受到相應(yīng)后,如果發(fā)現(xiàn)沒(méi)有Expires字段,瀏覽器根據(jù)文件的類型和“Last-Modified”字段來(lái)推斷出一個(gè)合適的失效時(shí)間,并存儲(chǔ)在客戶端。推測(cè)出的時(shí)間一般是接受到響應(yīng)時(shí)間后的三天左右。

    Apache的expires_module模塊可以在Http響應(yīng)頭部自動(dòng)加上Expires字段。在Apache的httpd.conf文件中進(jìn)行如下配置:

#啟用expires_module模塊
LoadModule expires_module modules/mod_expires.so
# 啟用有效期控制
ExpiresActive On
# GIF有效期為1個(gè)月
ExpiresByType image/gif A2592000
# HTML文檔的有效期是最后修改時(shí)刻后的一星期
ExpiresByType text/html M604800
#以下的含義類似
ExpiresByType text/css “now plus 2 month”
ExpiresByType text/js “now plus 2 day”
ExpiresByType image/jpeg “access plus 2 month”
ExpiresByType image/bmp “access plus 2 month”
ExpiresByType image/x-icon “access plus 2 month”
ExpiresByType image/png “access plus 2 month”

對(duì)于動(dòng)態(tài)頁(yè)面,如果在頁(yè)面內(nèi)部沒(méi)有通過(guò)函數(shù)強(qiáng)制加上Expires,例如header(”Expires: ” . gmdate(”D, d M Y H:i:s”) . ” GMT”),Apache服務(wù)器會(huì)把Wed, 11 Jan 1984 05:00:00 GMT作為Expires字段內(nèi)容,返回給瀏覽器。即認(rèn)為動(dòng)態(tài)頁(yè)面總是失效的。而瀏覽器仍然會(huì)保存已經(jīng)失效的動(dòng)態(tài)頁(yè)面。

可以發(fā)現(xiàn)Firefox瀏覽器總是緩存所有頁(yè)面,不管失效、不失效還是沒(méi)有聲明失效時(shí)間。即使緩存中聲明了一個(gè)網(wǎng)頁(yè)的實(shí)效日期是 1970-01- 01 08:00:00,瀏覽器仍然會(huì)發(fā)送該文件在緩存中的Last-Modified和ETag字段。如果在服務(wù)器端驗(yàn)證通過(guò),返回304狀態(tài),瀏覽器就還會(huì)使用此緩存。

Cache-Control

    Cache-Control字段中可以聲明多些元素,例如no-cache, must-revalidate, max-age=0等。這些元素用來(lái)指明頁(yè)面被緩存最大時(shí)限,如何被緩存的,如何被轉(zhuǎn)換到另一個(gè)不同的媒介,以及如何被存放在持久媒介中的。但是任何一個(gè) Cache-Control指令都不能保證隱私性或者數(shù)據(jù)的安全性?!皃rivate”和“no-store”指令可以為隱私性和安全性方面提供一些幫助,但是他們并不能用于替代身

份驗(yàn)證和加密。

     Apache的mod_cern_meta模塊允許文件級(jí)Http響應(yīng)頭部的控制,同時(shí)它也可以配置Cache-Control頭(或任何其他頭)。響應(yīng)頭文件是放在原始目錄的子目錄中,根據(jù)原始文件名所命名的一個(gè)文件。具體用法請(qǐng)參閱Apache的官方網(wǎng)站。其中Cache-Control : max-age表示失效日期。如果沒(méi)有啟動(dòng)mod_cern_meta模塊,Apache服務(wù)器會(huì)把Expires字段中的日期換算成以秒為單位的一個(gè) delta值,賦值給max-age。如果啟動(dòng)mod_cern_meta模塊,并且配置了max-age值,Apache會(huì)將這個(gè)覆蓋Expires字段。同時(shí),max-age隱含了Canche-Control: public。這樣瀏覽器接受到的Cache-Control : max-age和Expires值就是一致的。

    如果失效日期Cache-Control : max-ag=0或者是負(fù)值,瀏覽器會(huì)在對(duì)應(yīng)的緩存中把Expires設(shè)置為1970-01-01 08:00:00。

Last-Modified

    Last-Modified和ETag是條件請(qǐng)求(Conditional Request)相關(guān)的兩個(gè)字段。如果一個(gè)緩存收到了針對(duì)一個(gè)頁(yè)面的請(qǐng)求,它發(fā)送一個(gè)驗(yàn)證請(qǐng)求詢問(wèn)服務(wù)器頁(yè)面是否已經(jīng)更改,在HTTP頭里面帶上” ETag”和”If Modify Since”頭。服務(wù)器根據(jù)這些信息判斷是否有更新信息,如果沒(méi)有,就返回HTTP 304(NotModify);如果有更新,返回HTTP 200和更新的頁(yè)面內(nèi)容,并且攜帶新的”ETag”和”LastModified”。

    使用這個(gè)機(jī)制,能夠避免重復(fù)發(fā)送文件給瀏覽器,不過(guò)仍然會(huì)產(chǎn)生一個(gè)HTTP請(qǐng)求。

一般純靜態(tài)頁(yè)面本身都會(huì)有Last-Modified信息,Apache服務(wù)器會(huì)讀取頁(yè)面文件中的Last-Modified信息,并添加到http響應(yīng)頭部。

    對(duì)于動(dòng)態(tài)頁(yè)面,如果在頁(yè)面內(nèi)部沒(méi)有通過(guò)函數(shù)強(qiáng)制加上Last-Modified,例如header(”Last-Modified: ” . gmdate(”D, d M Y H:i:s”) . ” GMT”),Apache服務(wù)器會(huì)把當(dāng)前時(shí)間作為L(zhǎng)ast-Modified,返回給瀏覽器。

   無(wú)論是純靜態(tài)頁(yè)面還是動(dòng)態(tài)頁(yè)面,F(xiàn)irefox瀏覽器巧妙地按照接受到服務(wù)器響應(yīng)的時(shí)間設(shè)置緩存頁(yè)面的Last-Modified,而不是按照http響應(yīng)頭部中的Last-Modified字段。

ETag

   既然有了Last-Modified,為什么還要用ETag字段呢?因?yàn)槿绻谝幻腌娭畠?nèi)對(duì)一個(gè)文件進(jìn)行兩次更改,Last-Modified就會(huì)不正確。因此,HTTP/1.1利用Entity Tag頭提供了更加嚴(yán)格的驗(yàn)證。

    Apache服務(wù)器默認(rèn)情況下,會(huì)對(duì)所有的靜態(tài)、動(dòng)態(tài)文件的響應(yīng)頭添加ETag字段。在Apache的httpd.conf文件中可以通過(guò)FileETag指令配置該選項(xiàng)。

   FileETag指令配置了當(dāng)文檔是基于一個(gè)文件時(shí)用以創(chuàng)建 Etag(entity tag)響應(yīng)頭的文件的屬性。在Apache 1.3.22及以前,ETag的值是對(duì)文件的索引節(jié)(INode),大?。⊿ize)和最后修改時(shí)間(MTime)進(jìn)行Hash后得到的。如果一個(gè)目錄的配置包含了‘FileETag INode MTime Size’而其一個(gè)子目錄包含了‘FileETag -INode’那么這個(gè)子目錄的設(shè)置(并會(huì)被其下任何沒(méi)有進(jìn)行覆蓋的子目錄繼承)將等價(jià)于‘FileETag MTime Size’。

    在多臺(tái)負(fù)載平衡的服務(wù)器環(huán)境下,同一個(gè)文件會(huì)有不同的etag或者文件修改日期,瀏覽器每次都會(huì)重新下載。設(shè)置‘FileETag None’可以使響應(yīng)頭不再包含ETag字段。

 

三種典型web服務(wù)器Header設(shè)置內(nèi)容過(guò)期方法

一、Internet 信息服務(wù) (IIS)的內(nèi)容過(guò)期設(shè)置

如果IIS 網(wǎng)站中有時(shí)間敏感信息,可以配置設(shè)置來(lái)保證過(guò)期信息不被代理服務(wù)器或 Web 瀏覽器緩存??梢耘渲镁W(wǎng)站內(nèi)容,使之在任

何的時(shí)間自動(dòng)過(guò)期。當(dāng)啟用內(nèi)容過(guò)期時(shí),Web 瀏覽器將比較當(dāng)前日期和截止日期,以便決定是顯示緩存頁(yè)還是從服務(wù)器請(qǐng)求更新的頁(yè)

。Microsoft ASP.NET 這樣的服務(wù)器端技術(shù)可用于動(dòng)態(tài)更改提供的內(nèi)容。通常,時(shí)間敏感信息只限于單個(gè)文件、目錄或網(wǎng)站;不過(guò),您也可以為某臺(tái)計(jì)算機(jī)上的所有網(wǎng)站設(shè)置內(nèi)容過(guò)期。

必須是本地計(jì)算機(jī)上 Administrators 組的成員或者必須被委派了相應(yīng)的權(quán)限,才能執(zhí)行下列步驟。作為安全性的最佳操作,請(qǐng)使用不屬于 Administrators 組的帳戶登錄計(jì)算機(jī),然后使用運(yùn)行方式命令以管理員身份運(yùn)行 IIS管理器

在命令提示符下,鍵入 runas /user:administrative_accountname "mmc %systemroot%\system32\inetsrv\iis.msc"。

設(shè)置網(wǎng)站內(nèi)容的過(guò)期時(shí)間
1. 在 IIS 管理器中,展開(kāi)本地計(jì)算機(jī);右鍵單擊要設(shè)置內(nèi)容過(guò)期的網(wǎng)站、虛擬目錄或文件,然后單擊“屬性”。
2. 單擊“HTTP 頭”選項(xiàng)卡。
3. 選中“啟用內(nèi)容過(guò)期”復(fù)選框。
4. 單擊“立即過(guò)期”、“此時(shí)間段后過(guò)期”或“過(guò)期時(shí)間”,然后在對(duì)應(yīng)的框中輸入所需的過(guò)期信息。
5. 單擊“確定”。

 

二、APACHE服務(wù)的內(nèi)容過(guò)期設(shè)置

Apache配置摘錄及解釋
i. 過(guò)期相關(guān)設(shè)置
LoadModule headers_module modules/mod_headers.so
#Load 修改header的模塊。
LoadModule expires_module modules/mod_expires.so
#Load 設(shè)定過(guò)期header的模塊。
Header append Via: CCN-BJ-4-502
#增加一個(gè)Via header,值配置成設(shè)備的hostname。
KeepAliveTimeout 60
#設(shè)置連接的保持時(shí)間為60秒。
ExpiresActive On
#啟用過(guò)期header功能。
ExpiresDefault A604800
#缺省過(guò)期時(shí)間為“訪問(wèn)后的604800秒”

 

<Directory /data/download>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
ExpiresByType text/html A300
#text/html類型文件的過(guò)期設(shè)置為“訪問(wèn)后的300秒”
ExpiresByType text/css A259200
#text/css類型文件的過(guò)期設(shè)置為“訪問(wèn)后的259200秒”
ExpiresByType application/x-javascript A300
# application/x-javascript類型文件的過(guò)期設(shè)置為“訪問(wèn)后的300秒”
ExpiresByType image/gif A2592000
#image/gif類型文件的過(guò)期設(shè)置為“訪問(wèn)后的2592000秒”

ExpiresByType application/x-shockwave-flash A2592000

# application/x-shockwave-flash類型文件的過(guò)期設(shè)置為“訪問(wèn)后的2592000秒”

</Directory>
上述配置文件中l(wèi)oad的兩個(gè)模塊:mod_headers.so  和mod_expires.so 可以讓Apache具有對(duì)header的一些定制功能。
ExpiresByType:     表示按照文件類型-MIME-TYPE設(shè)定過(guò)期策略;
A300: 表示在Access后300秒后過(guò)期;
ExpiresByType text/css A2592000:    表示Mime type是text/css的文件,在Access后2592000秒過(guò)期。
ExpiresDefault A604800:  表示除了單獨(dú)制定的文件類型等過(guò)期策略外的其他內(nèi)容,按照這個(gè)缺省的策略設(shè)定:訪問(wèn)后604800秒過(guò)期。
 上面的方法可以實(shí)現(xiàn)根據(jù)web發(fā)布的不同文件類型,針對(duì)不同的發(fā)布目錄進(jìn)行過(guò)期策略設(shè)置。在按照如上方法設(shè)置后,Apache會(huì)自動(dòng)的產(chǎn)生兩個(gè)相關(guān)的http header,舉例如下:
HTTP/1.1 200 OK
Date: Tue, 27 Mar 2007 17:44:21 GMT
Server: Apache/2.0.54 (Unix)
Last-Modified: Thu, 25 Jan 2007 07:45:45 GMT
ETag: “72df3a-93-99499c40”
Accept-Ranges: bytes
Content-Length: 147
Cache-Control: max-age=2592000
Expires: Thu, 26 Apr 2007 17:44:21 GMT
Via: CCN-BJ-4-575
Keep-Alive: timeout=60, max=100
Connection: Keep-Alive
Content-Type: image/gif

Length: 147 [image/gif]
  其中:Date + Max-age = Expires.  Max-age是個(gè)時(shí)間長(zhǎng)度,對(duì)應(yīng)web server上面設(shè)置的過(guò)期時(shí)間;Expires是根據(jù)max-age算出來(lái)的過(guò)期時(shí)間點(diǎn),兩者是一致的,不同cache在判斷內(nèi)容是否過(guò)期時(shí)會(huì)嚴(yán)格比較系統(tǒng)時(shí)間和上述過(guò)期時(shí)間,或者比較age(在cache中存住的時(shí)間長(zhǎng)度)和max-age的值。

 

三、lighttpd

lighttpd默認(rèn)是沒(méi)有開(kāi)啟expire模塊的,需要我們?cè)谑褂檬鞘止ら_(kāi)啟這個(gè)模塊支持。把mod_expire前面的“#”號(hào)去掉。

# vi  /usr/local/lighttpd/etc/lighttpd.conf
                                "mod_expire",


設(shè)定過(guò)期時(shí)間

    * 設(shè)定指定url的過(guò)期時(shí)間:

expire.url = (
       "/images/" => "access 3 hours",
       "/admin/" => "access 3 hours",
       "/area/" => "access 3 hours",
       "/calendar/" => "access 3 hours",
       "/common/" => "access 3 hours",
       "/front/" => "access 3 hours",
       "/inc/" => "access 3 hours",
       "/jeditor/" => "access 3 hours",
       "/js/" => "access 3 hours",
       "/script/" => "access 3 hours",
       "/theme/" => "access 3 hours",
       "/upload/" => "access 3 hours",
       "/view/" => "access 3 hours",
       "/help/" => "access 3 hours",
       "/htm/" => "access 5 minutes"
       )

設(shè)置Etag

在配置文件中增加,etag.use-inode="disable"(i節(jié)點(diǎn)不參與etag的運(yùn)算),保證多臺(tái)服務(wù)器生成的Etag值一致。

該文章在 2010/8/13 18:22:49 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved