ano*_*one 5 php caching header response http-status-code-404
我们正在努力减少一些"毫无意义"的流量.
如果我们发送带有404响应的有效缓存控制头(a-la"do cache"),现代浏览器会缓存所请求的资源不存在吗?
我们使用基于PHP的自定义404处理程序,由于会话创建而发送不缓存标头,因此我们删除了这些.但现在想知道,如果我们某些资源无效,我们是否应该发送适当的缓存标头?
这些是由所有用户使用相同的uri访问的公共资源.
谢谢!
hak*_*kre 10
现代浏览器的HTTP协议实现理想地接近标准,对于代理服务器也是如此,如果您想对用户和非故意机器人流量产生影响,您应该考虑这些服务器.目前的版本是1.1,一些摘录:
10.4客户端错误4xx
4xx类状态代码适用于客户端似乎有错误的情况.除了在响应HEAD请求时,服务器应该包括一个实体,其中包含错误情况的解释,以及它是临时或永久条件.这些状态代码适用于任何请求方法.用户代理应该向用户显示任何包含的实体.
如果客户端正在发送数据,则在服务器关闭输入连接之前,使用TCP的服务器实现应该小心确保客户端确认收到包含响应的数据包.如果客户端在关闭后继续向服务器发送数据,则服务器的TCP堆栈将向客户端发送重置数据包,这可能会擦除客户端未确认的输入缓冲区,然后HTTP应用程序才能读取和解释它们.
更具体地说是404:
10.4.5 404未找到
服务器未找到与Request-URI匹配的任何内容.没有说明该病症是暂时的还是永久性的.如果服务器通过一些内部可配置的机制知道旧资源永久不可用且没有转发地址,则应该使用410(Gone)状态代码.当服务器不希望确切地说明请求被拒绝的原因,或者没有其他响应适用时,通常会使用此状态代码.
这么多的404响应代码.
您询问:
现在[我们]想知道对于我们某些资源是否无效,我们是否应该发送适当的缓存标头?
您没有给出任何您想要使用的特定缓存标头,因此回答您的问题有点不准确.缓存是协议规范中的一部分:13在HTTP中缓存.
通常,以下内容应该是您正在寻找的内容,摘自13.1.1缓存正确性:
正确的缓存必须响应一个请求,该请求具有适合于请求的缓存所持有的最新响应(请参阅第13.2.5节,第13.2.6节和第13.12节),该请求满足以下条件之一:
...
Run Code Online (Sandbox Code Playgroud)3. It is an appropriate 304 (Not Modified), 305 (Proxy Redirect), or error (4xx or 5xx) response message.
因此,您可以缓存404响应消息并将其发送到缓存信号.代理和客户应该处理它.