繁体   English   中英

发送带有 404 响应的缓存控制/过期/杂注 - 现代浏览器是否有效/理解?

[英]sending cache-control / expires / pragma with 404 response - valid / understood by modern browsers?

我们正在努力减少一些“无意义”的流量。

如果我们发送带有 404 响应的有效缓存控制标头(a-la “do cache”),现代浏览器会缓存请求的资源不存在吗?

我们使用了一个自定义的基于 php 的 404 处理程序,由于 session 创建,它正在发送不缓存标头,因此我们删除了这些。 但是现在想知道我们确定的资源是否无效,我们应该发送正确的缓存头吗?

这些是所有用户通过相同 uri 访问的公共资源。

谢谢!

现代浏览器有一个HTTP 协议的实现,理想情况下接近标准,代理服务器也是如此,如果你想对用户和非故意的机器人流量产生影响,你应该考虑到这一点。 当前版本是 1.1 ,部分摘录:

10.4 客户端错误 4xx

状态码的 4xx class 适用于客户端似乎出错的情况。 除了响应 HEAD 请求时,服务器应该包含一个实体,其中包含对错误情况的解释,以及它是暂时的还是永久的情况。 这些状态码适用于任何请求方法。 用户代理应该向用户显示任何包含的实体。

如果客户端正在发送数据,使用 TCP 的服务器实现应该小心确保客户端在服务器关闭输入连接之前确认收到包含响应的数据包。 如果客户端在关闭后继续向服务器发送数据,则服务器的 TCP 堆栈将向客户端发送一个复位数据包,这可能会在 HTTP 应用程序读取和解释之前擦除客户端未确认的输入缓冲区。

更具体地说,对于 404:

10.4.5 404 未找到

服务器未找到任何与请求 URI 匹配的内容。 没有说明这种情况是暂时的还是永久性的。 如果服务器通过一些内部可配置的机制知道旧资源永久不可用并且没有转发地址,则应该使用 410 (Gone) 状态代码。 当服务器不希望确切地揭示请求被拒绝的原因或没有其他响应适用时,通常使用此状态代码。

404 响应代码就这么多。

您问:

现在 [我们] 想知道对于我们确定的资源是否无效,我们是否应该发送正确的缓存标头?

您没有提供任何您想使用的特定缓存标头,因此回答您的问题有点不精确。 缓存是协议规范中它自己的一部分: 13 Caching in HTTP

通常,以下内容应该是您要查找的内容,摘自13.1.1 Cache Correctness

正确的缓存必须使用缓存所持有的最新响应来响应请求,该响应符合以下条件之一:

...

 3. It is an appropriate 304 (Not Modified), 305 (Proxy Redirect), or error (4xx or 5xx) response message.

因此,您可以缓存 404 响应消息并将它们发送到缓存。 代理和客户应该处理它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM