2012-12-17 46 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