2012-12-17 105 views
0

我正在寫我自己的靜態網頁內容傳遞例程。對於緩存我計劃包括散列在URL中像哈希文件服務靜態內容Web服務器

/static/file.MD5HASH.png

我在一個靜態的編譯語言開發。我讀 https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#cachedstaticfilesstoragehttps://gist.github.com/3207357

現在我的心理問題是如何有效地確定一個文件的哈希?我不會計算每次向服務器發送請求時的散列值。所以我需要一些緩存。

我可以寫一個程序,幫助這需要的路徑,靜態內容,遞歸計算哈希和存儲結果作爲

filename.png HASH

在一個名爲.cache.hash.lookup文件

。該文件在每個請求上都會加載到Web服務器的啓動和狀態中,因此當靜態文件即將被提供時,它將在緩存中查找它,並且如果緩存已過期,請重新加載緩存。

這可行嗎?請我不需要建議如何使用框架X來完成它,因爲我想理解它並編寫自己的例程。

回答

0

讀取您的鏈接,這個想法是存儲同一資源的多個版本,所以當您插入一個新文件時,會將哈希添加到文件名中。

您的HTTP服務器可能很笨,只是按名稱查找文件。 (另一個好處我看到的是你可以一味「304不改變」,以任何條件的要求,如在文件名作爲的eTag的哈希值。響應)

還是我失去了一些東西?

+0

那麼,存儲多個版本的文件是Django的cachedstatic文件的細節。 我的觀點是,Web服務器如何快速添加所請求文件的散列,而無需在每次請求時重新創建散列。它必須保持某種散列緩存,它最好由後臺進程重新驗證,後臺進程在文件更改後立即重新計算文件散列值。 – JohnDoe

+0

我或你不明白這個機制是如何工作的:在設計時散列被添加到文件名中,所以引用該資源的HTML已經有一個URL,如/static/file.MD5HASH.png服務器不需要知道關於運行時怪異文件名的語義。這就是要求的,這就是文件系統中的內容。文件系統完整性驗證不受Web服務器的關注。 – Szocske