【问题标题】:How to cache an HTTP POST response?如何缓存 HTTP POST 响应?
【发布时间】:2011-04-21 22:00:05
【问题描述】:

我想为 POST 请求创建一个可缓存的 HTTP 响应。

我的实际实现对 POST 请求的响应如下:

HTTP/1.1 201 Created
Expires: Sat, 03 Oct 2020 15:33:00 GMT
Cache-Control: private,max-age=315360000,no-transform
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 9
ETag: 2120507660800737950
Last-Modified: Wed, 06 Oct 2010 15:33:00 GMT

.........

但看起来浏览器(Safari、Firefox 测试)没有缓存响应。

HTTP RFC对应的部分说:

对此方法的响应不可缓存,除非响应包含适当的 Cache-Control 或 Expires 标头字段。但是,303(参见其他)响应可用于指示用户代理检索可缓存资源。

所以我认为它应该被缓存。我知道我可以设置会话变量并设置 cookie 并执行 303 重定向,但我想缓存 POST 请求的响应。

有什么办法吗?

P.S.:我从一个简单的200 OK 开始,所以它不起作用。

谢谢,

【问题讨论】:

  • 对帖子的响应通常是唯一的,具体取决于发布的参数,因此缓存它通常没有意义。你的回应是什么?我有一种感觉,你在做一些不完全正确的事情。
  • 这将是一个类似商店的东西。如果有人向 URL 发布内容,它将将该内容存储在该客户端的指定位置。因此客户端可以缓存它并且不需要重新检查位置,因为它与为当前客户端发布的位置相同。
  • 我解决了带有自定义标头(用于值)的 AJAX GET 请求的实际问题。但我仍然对这个问题感兴趣。

标签: http browser caching post cross-browser


【解决方案1】:

您能否尝试将Cache-Control 更改为public 而不是private,看看它是否有效?

【讨论】:

  • 我会尝试,但内容不应公开缓存
【解决方案2】:

我还要注意,缓存始终是可选的(在 HTTP/1.1 RFC 中是 MAY)。由于在大多数情况下,成功的 POST invalidate 缓存条目,很可能只是浏览器缓存您正在查看的情况只是不实现缓存 POST 响应(因为这很不常见 - - 通常这是通过将事物格式化为 GET 来完成的,这听起来像是您已经完成的)。

【讨论】:

    猜你喜欢
    • 2011-03-25
    • 2012-08-01
    • 2012-04-10
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    相关资源
    最近更新 更多