【问题标题】:Hash files serve static content web server哈希文件服务于静态内容 Web 服务器
【发布时间】:2012-12-17 09:56:14
【问题描述】:

我正在编写自己的静态 Web 内容交付例程。对于缓存,我计划在 URL 中包含散列,例如

/static/file.MD5HASH.png

我正在使用静态编译语言进行开发。我读 https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#cachedstaticfilesstoragehttps://gist.github.com/3207357

现在我的心理问题是如何有效地确定文件的哈希值?我不会在每次向服务器请求时计算哈希值。所以我需要一些缓存。

我可以编写一个帮助程序,获取静态内容的路径,递归计算哈希并将结果存储为

文件名.png 哈希

在一个名为 .cache.hash.lookup 的文件中。该文件在 Web 服务器启动时加载并在每个请求上声明,因此当即将提供静态文件时,它将在缓存中查找它,如果缓存已过期,则重新加载缓存。

这可行吗?请我不需要建议如何使用框架 X 来完成它,因为我想理解它并编写自己的例程。

【问题讨论】:

    标签: http caching static cdn


    【解决方案1】:

    阅读您的链接,想法是存储同一资源的多个版本,因此在您插入新文件时会向文件名添加哈希。

    您的 HTTP 服务器可能很笨,只是按名称查找文件。 (我看到的另一个优点是您可以盲目地用“304 Not changed”响应任何条件请求,因为文件名中的哈希充当 etag。)

    还是我错过了什么?

    【讨论】:

    • 嗯,存储一个文件的多个版本是 Django 的 cachedstaticfiles 的一个细节。我的观点是网络服务器如何快速添加所请求文件的哈希值,而无需在每次请求时重新创建哈希值。它必须维护某种哈希缓存,最好由后台进程重新验证,该后台进程在文件更改后立即重新计算文件哈希。
    • 要么我要么你不明白这个机制是如何工作的:哈希是在设计时添加到文件名的,所以引用资源的 HTML 已经有一个像 /static/file.MD5HASH.png 这样的 URL服务器在运行时不需要知道奇怪文件名的语义。这就是所要求的,这就是文件系统中的内容。文件系统完整性验证与网络服务器无关。
    猜你喜欢
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 2013-12-08
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多