2012-02-24 62 views
2

我发现这里几个相关的问题重发后在304响应头未修改

我想要做的太是实施拉请求处理FO我的同步服务,告诉是否有任何用户的数据库中的对象的任何更改。如果进行了更改,我使用对象名称及其ID进行回复。如果没有变化,我会发送一个304 Not Modified响应。

为了控制这些请求的频率,我带着一个想法,在所有响应中添加一个Retry-After标题。问题在于,当304响应被发送时,Apache会剪切所有头文件。

根据RFC2616

如果条件GET使用强缓存验证(见13.3.3 ),响应不应该包含其他实体头。

但是Retry-After不是实体头。我错了还是错过了一些东西?

是否有任何解决方法? 如果这不能解决(304 Retry-After头响应),这种情况下的其他选择是什么?使用204 No Content而不是304 Not modified似乎合理吗?

回答

2

事实证明,Apache过滤器304未修改针对标头名称的hard-coded set的响应。对于版本2.2.x中,他们是:

连接,保持活动,ETag的,内容位置,过期,缓存控制,因人而异,警告,WWW身份验证,代理服务器进行身份验证,设置Cookie,套装 - Cookie2

一种解决方法是重载该列表中的标题。例如,你可能滥用的警告头:

header("Warning: X-Retry-After: 60"); //tested on Apache 2.2.3/PHP5.1.6 

另见:Putting detailed REST error message in HTTP Warning header, good/bad idea?


及注意事项:尽管Apache的实现,RFC2616似乎表明Retry-After合理的304点回应:

...此字段也可以与任何3xx(重定向)响应一起使用表示在发出重定向请求之前用户代理程序要求等待的最短时间。 ...