我正在使用嵌入式系统上的自定义网络服务器,并且在正确设置我的 HTTP 标头以进行缓存时遇到了一些问题。
我们的网络服务器将所有动态内容生成为 XML,并且我们使用半静态 XSL 文件来显示它,其中包含一些动态 JSON 请求以及半静态图像。我说“半静态”是因为当我们需要进行固件更新时会出现问题,这可能会更改 XSL 和图像文件。
以下是需要做的事情:缓存 XSL 和图像文件,不缓存 XML 和 JSON 响应。我可以完全控制 HTTP 响应,目前:
- 将 ETag 与 XSL 和图像文件一起使用,使用修改后的时间和大小来生成 ETag
- 在 XML 和 JSON 响应中设置 Cache-Control: no-cache
正如我所说,在固件更新之前,当 XSL 和图像文件有时被缓存时,一切正常。我已经看到它在最新版本的 Firefox 和 Safari 上运行良好,但在 IE 上遇到了一些问题。
我知道解决这个问题的一种方法是在每个版本之后简单地重命名 XSL 和图像文件(例如 logo-v1.1.png、logo-v1.2.png)并将 Expires 标头设置为将来的日期,但是这对于 XSL 文件来说会很困难,我想避免这种情况。
注意:设备上有一个时钟,但需要用户设置它,并且可能不是 100% 可靠的,这可能导致我在使用 ETags 时出现缓存问题。
我应该采用的最佳做法是什么?我想避免尽可能多的网络服务器请求,但在软件更新后使旧的 XSL 和图像文件失效是第一要务。