Web 開發人員需知的 Web 緩存知識(5)

發表于:2013-07-30來源:web開發家園作者:sxwgf點擊數: 標簽:緩存
默認情況下,HTTP驗證保護的頁面是私有的,共享緩存是不能保存的。然而,你可以通過Cache-Control: public頭的設置使其公有。HTTP 1.1標準兼容的緩存服務器可

  默認情況下,HTTP驗證保護的頁面是私有的,共享緩存是不能保存的。然而,你可以通過Cache-Control: public頭的設置使其公有。HTTP 1.1標準兼容的緩存服務器可以使之緩存。

  如果你希望這些緩存的頁面在用戶查看之前還要驗證一下,可以組合使用Cache-Control: public和no-cache頭,這相對于告訴緩存器它從緩存中送出內容前必須遞交客戶端的驗證給原始服務器。這個頭信息如下所示:

  Cache-Control: public, no-cache

  不管怎么,這是最小化驗證最好的方法;例如,你的圖片不敏感,你可以把它放在分離的目錄中,并配置你的服務對它們不做強制驗證。這樣,那些圖片就會很自然的被緩存了。

  如果人們通過緩存訪問我的網站,我應該擔心安全嗎?

  SSL頁面不會被代理服務器緩存,所以這個你不需要擔心。但是,代理服務器就好非SSL頁面請求以及URL抓取這口,你懂的,這是不安全的。無良的管理員可能就會收集網站用戶的信息,尤其在URL中。

  事實上,任何網絡管理員都可以收集你的客戶端和服務器端之間的這類信息。CGI ⑫腳本有個漏洞,會把用戶名和密碼放在自身的URL地址中,這很容易讓其他人發現用戶的登陸信息。

  如果你懂得互聯網安全的些基本機制,就不會對代理緩存感到任何驚訝。

  ⑫CGI:通用網關接口(Common Gateway Interface). 用于初始化軟件服務的服務器方接口。這套接口描述了Web服務器與同一計算機上的軟件的通信方式。

  通用網關接口,它是一段程序,運行在服務器上,提供同客戶端HTML頁面的接口,通俗的講CGI就像是一座橋,把網頁和WEB服務器中的執行程序連 接起來,它把HTML接收的指令傳遞給服務器,再把服務器執行的結果返還給HTML頁;用CGI可以實現處理表格,數據庫查詢,發送電子郵件等許多操作, 最常見的CGI程序就是計數器。CGI使網頁變得不是靜態的,而是交互式的。

  我在尋找一個集成的Web發布解決方案。哪些是可緩存的?

  這個是不確定的。一般來說,越復雜的系統越難緩存。最差的情況就是所有的內容都是動態生成,并且不提供校驗器,與緩存壓根無緣。你可以和你供應商的技術人員溝通獲取更多信息,并參考下面實現注意事項。

  我的圖片緩存一個月后才到期,我現在就想變動!

  Expires頭是繞不過去的,除非緩存(瀏覽器或者代理)空間不足才會刪除副本,緩存副本會一直使用。

  最有效的方法是修改鏈接,這樣會從源服務器獲取完整的新內容。請記住,調用圖片的這個頁面也會被緩存的,正因如此,我們需要讓圖片以及其他類似的靜態資源易緩存,而頁面呢可以隨著自身的改變(例如改變了一個圖片的URL地址Add)即時更新。

  如果你想擺脫特定緩存,重載內容,可以試試強制刷新(在FireFox中,shift鍵+reload按鈕等同于處理Pragma: no-cache請求頭)或者讓緩存管理員使用某些接口刪除內容。

  我運行一個Web Hosting服務。我怎樣才能讓我的用戶發布緩存友好的網頁?

  如果你使用apahe,可以考慮允許他們使用.htaccess文件并提供相應的文檔。

  否則你需要在每一個虛擬主機上為各種緩存屬性建立預定的區域。比如:你可以指定一個叫/cache-1m的目錄用來放讀取后要緩存一個月的內容,然后再建一個/no-cache的目錄,并在頭信息中指定這么目錄中的內容不被緩存。

  不管上面你做的如何,總之最好優先給用戶量大的客戶做緩存處理。大部分服務器節約的流量以及負載都是來自高容量的網站。

  我明明告訴網頁要好好緩存,但它老是去請求,怎么破?

  緩存服務器并不總是要求內容要保持并重用,某些條件下,他們是不保存不重用的,所有的緩存服務器都回基于文件的大小、類型(圖片、頁面…),或者服務器空 間的剩余來確定如何緩存。如果你的文件比較大或很熱門,可能就不會被緩存。有些緩存服務器允許管理員決定哪些內容要存儲,有些緩存服務器允許內容長存緩存 中,所以,它們總是可用的。

  實現需注意的:Web服務器端

  一般說來,應該選擇最新版本的Web服務器程序來部署。不僅因為它們包含更多利于緩存的功能,新版本往往在性能和安全性方面都有很多的改善。

  Apache HTTP服務器

  Apache使用可選模塊包含頭信息,頭信息Expires和Cache-Control一并包含。這些模塊在1.2版本以上都支持。

  這些模塊需要編譯到Apache中,雖然包含,但是默認并未開啟。為了確定相應模塊已經被啟用,找到httpd⑬程序,運行httpd -l, 它會列出可用的模塊(注意,僅有內部編譯的模塊列表才會顯示,在較新版本的Apache中,使用httpd -M可以包含動態加載的模塊N),我們需要關注的是expires模塊(expires_module)和headers模塊(headers_module)。

  ⑬httpd:httpd是Apache超文本傳輸協議(HTTP)服務器的主程序。被設計為一個獨立運行的后臺進程,它會建立一個處理請求的子進程或線程的池。

  如果這些模塊不可用,你需要聯系管理員,重新編譯以包含這些模塊。這些模塊可以通過取消配置文件中的注釋掉啟用,或者在編譯的時候增加-enable -module=expires和-enable-module=headers參數(apache 1.3+). 參開Apache中的INSTALL文件。

  一旦你的Apache有了相應的模塊,你可以使用mod_expires指定過期的時間,要么在.htaccess文件,要么在服務器的access.conf文件。你可以設置過期時間是從訪問時間開始還是文件修改時間開始,并應用到特定類型文件上或設為默認配置。查看官方該模塊文檔獲得更多信息,或者遇到問題的時候向你身邊的apache專家討教。

  為應用Cache-Control頭,你需要使用mod_headers模塊,其允許你為資源指定任意的頭信息??蓞⒖糾od_headers官方文檔。

  下面是.htaccess文件展示了如何使用頭信息:

  .htaccess文件允許Web發布者使用配置文件中的指定??梢杂绊懩夸浺约白幽夸泝热?。和你的服務器管理員溝通下,看看它們是否可用。

  ### activate mod_expiresExpiresActive On### Expire .gif's 1 month from when they're accessedExpiresByType image/gif A2592000### Expire everything else 1 day from when it's last modified### (this uses the Alternative syntax)ExpiresDefault "modification plus 1 day"### Apply a Cache-Control header to index.htmlHeader append Cache-Control "public, must-revalidate"

原文轉自:http://web.itivy.com/article-805-1.html

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97