1

我正在实现一种自定义 Web 服务器。并且正在考虑添加 Expires 标头支持。但是,我有点不确定如何确切地实施它。

如果对服务器上相同的未更改资源发出多个冷缓存请求并且服务器返回不同的 Expires 标头(例如,它使用相对时间来计算 Expires 日期的确切值,例如从请求时间起 +6 小时),是否这也会使中间所有代理服务器上的缓存无效?还是不可能发生(根据规范)?

HTTP 标头是否Expires需要在多个冷缓存请求中保持一致?

4

1 回答 1

0

好吧,没关系,在HTTP Spec的Cache Revalidation and Reload Controls部分下找到了相关信息

基本上,你可以为你想要的所有不同的验证器提供服务,但你必须知道,在这种情况下,代理可能有一组不同的验证器,来自它们自己的缓存和与代理通信的各种用户代理。他们可能会选择向您发送一个,这对于最终用户来说可能不是正确的或最佳的。但是,规范中提出了“最佳方法”。

我想这应该涵盖Expires标题以及 ETag、Cache-Control 等。


以下是相关摘录,以防有人感兴趣:

当通过 max-age=0 指令强制中间缓存重新验证其自己的缓存条目,并且客户端在请求中提供了自己的验证器时,提供的验证器可能与当前存储在缓存中的验证器不同入口。在这种情况下,缓存可以在不影响语义透明度的情况下使用任一验证器发出自己的请求。但是,验证器的选择可能会影响性能。最好的方法是让中间缓存在发出请求时使用自己的验证器。如果服务器回复 304(未修改),则缓存可以将其现在经过验证的副本返回给客户端并返回 200(OK)响应。然而,如果服务器回复一个新的实体和缓存验证器,中间缓存可以使用强比较功能将返回的验证器与客户端请求中提供的验证器进行比较。如果客户端的验证器等于原始服务器的验证器,则中间缓存仅返回 304(未修改)。否则,它会返回带有 200(OK)响应的新实体。如果请求包含 no-cache 指令,则不应包含 min-fresh、max-stale 或 max-age。

于 2010-03-16T23:18:20.997 回答