0

来自RFC 2616,第 9.5 节(POST):

对此方法的响应是不可缓存的,除非响应包含适当的 Cache-Control 或 Expires 标头字段。

什么是合适的标题

背景:服务器响应以下标头,我担心响应可能会被缓存。示例响应标头:

Cache-Control:max-age=2592000, public
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:22
Content-Type:application/json
Date:Sun, 20 May 2012 13:46:06 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive:timeout=15, max=100
Pragma:no-cache
Server:Apache/2.2.22 (Amazon)
Vary:Accept-Encoding,User-Agent
X-Powered-By:PHP/5.3.13

发布请求是使用 jQuery 的$.ajax函数从 JavaScript 发出的,cache设置为false. 但是,jQuery 忽略了该选项。引用截至 2012-05-20 CEST 的文档

使用 POST 获取的页面永远不会被缓存,因此 jQuery.ajaxSetup() 中的缓存和 ifModified 选项对这些请求没有影响。

更新

难道是jQuery的文档是错误的?请参阅我在 jQuery 论坛中的相关主题

4

2 回答 2

1

这个头,

Cache-Control:max-age=2592000, public

会导致响应被任何中介长时间缓存。响应有点混乱,因为pragma: no-cache与此相矛盾。但是,我怀疑只有某些较旧的代理才会查看编译指示标头。

jQuery 无法控制中间缓存,因此可能存在一些公共缓存,例如在您的 ISP 处,它们正在缓存响应。

于 2012-05-20T14:27:44.320 回答
0

看起来令人困惑,Cache-Control看起来像启用缓存,而Pragma似乎Expires同时禁用缓存。无论如何,HTTP 状态码应该准确地说明请求是否被缓存。200- 未缓存,304或类似 - 已缓存。

于 2012-05-20T14:34:18.117 回答