发送带有404响应的cache-control / expires / pragma - 现代浏览器有效/理解吗?

时间:2011-07-09 06:44:42

标签: php caching header http-status-code-404 response

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

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

我们使用基于自定义php的404处理程序,由于会话创建而发送不缓存标头,因此我们删除了这些。但现在想知道我们 CERTAIN 的资源是否无效,我们是否应该发送适当的缓存标头?

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

谢谢!

1 个答案:

答案 0 :(得分:10)

现代浏览器的HTTP Protocol实现理想情况下接近标准,对于代理服务器也是如此,如果您想对用户和非故意机器人流量产生影响,您应该考虑这些实现。目前version is 1.1,有些摘录:

  

10.4客户端错误4xx

     

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

     

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

更具体地说是404:

  

10.4.5 404 Not Found

     

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

404响应代码。

你问:

  

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

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

一般来说,以下内容应该是您正在寻找的内容,摘自13.1.1 Cache Correctness

  

正确的缓存必须响应一个请求,该请求具有适合于请求的缓存所持有的最新响应(请参阅第13.2.5节,第13.2.6节和第13.12节),该请求符合以下条件之一条件:

     

...

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

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