2010-02-26 187 views
0

我正在使用嵌入式系統上的自定義網絡服務器,並有一些問題正確設置我的HTTP標頭進行緩存。自定義網絡服務器緩存

我們的網絡服務器將所有動態內容生成爲XML,我們使用半靜態XSL文件來顯示一些動態JSON請求以及半靜態圖像。我說「半靜態」是因爲當我們需要進行可能會更改XSL和圖像文件的固件更新時,會出現問題。

以下是需要做的事情:緩存XSL和圖像文件,不緩存XML和JSON響應。我對HTTP響應完全控制,我目前:

  1. 使用與XSL和圖像文件的ETag,使用修改時間和大小來生成ETag的
  2. 設置的Cache-Control:在無緩存XML和JSON響應

正如我所說的,一切當XSL和圖像文件有時緩存工作花花公子,直到固件更新。我已經看到它與最新版本的Firefox和Safari一起工作良好,但IE瀏覽器遇到了一些問題。

我知道這個問題的一個解決方案是簡單地在每個版本後重命名XSL和圖像文件(例如logo-v1.1.png,logo-v1.2.png)並將Expires標頭設置爲日期在將來,但這將是困難的XSL文件,我想避免這種情況。

注意:單元上有一個時鐘,但需要用戶進行設置,並且可能不是100%可靠,這可能會導致使用ETags時出現緩存問題。

我應該採用什麼樣的最佳做法?我希望避免儘可能多的網絡服務器請求,但在軟件更新之後使舊的XSL和圖像文件無效是首要任務。

回答

0

我們正在研究同一個項目嗎?我找到了處理這個問題的最佳方法,並且走了很多死路。

我將我的.html和我的.shtml文件(動態JSON數據)立即過期。 (「Cache-Control:no-cache \ r \ nExpires:-1 \ r \ n」) 其他設置在10年內過期。 (「Cache-Control:max-age = 290304000 \ r \ n」)

我的makefile在所有的.html文件上運行perl腳本,並標識出你稱之爲「半靜態」的內容(images,javascript,css 。)然後,該腳本運行這些文件md5校驗和追加校驗文件:問號後

<script type="text/Javascript" src="js/all.js?7f26be24ed2d05e7d0b844351e3a49b1"> 

一切都被忽略,但除非引號之間的一切不匹配的瀏覽器會緩存它。

我使用all.js和all.css,因爲所有內容都使用相同的腳本進行組合和縮小。

出於好奇,你使用的是什麼嵌入式網絡服務器?

0

嘗試Cache-Control: no-storeno-cache告訴客戶端,應答可以被緩存;它通常不會被重用,除非緩存不能聯繫原始服務器。

順便說一句,單獨設置一個ETag不會使響應緩存;你也應該設置Cache-Control: max-age=nnn

您可以查看您的回覆將如何處理http://redbot.org/