小编典典

是否可以在 HTTP 中缓存 POST 方法?

all

使用非常简单的缓存语义:如果参数相同(当然,URL 相同),那么它就成功了。那可能吗?推荐的?


阅读 155

收藏
2022-08-16

共1个答案

小编典典

如果您使用适当的标头,则第 9.5 节(POST)中的相应RFC
2616
允许缓存对 POST 消息的 响应。

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

请注意,相同的 RFC 在第 13 节(HTTP 中的缓存)中明确指出,缓存必须在 POST 请求 之后使相应的实体无效。

某些 HTTP 方法必须导致缓存使实体无效。这是 Request-URI 或 Location 或 Content-Location
标头(如果存在)引用的实体。这些方法是:

  - PUT
  - DELETE
  - POST

我不清楚这些规范如何允许有意义的缓存。

这也在RFC 7231(第 4.3.3 节)中得到反映和进一步澄清,该
RFC 2616 已经过时。

POST 请求的响应只有在包含
明确的新鲜度信息时才可缓存(参见 [RFC7234] 的第 4.2.1 节)。
但是,POST 缓存并未得到广泛实施。对于源服务器希望客户端能够缓存 POST 的结果以供以后的 GET 重用的情况,源服务器可以发送包含结果和
Content-Location 的 200(OK)响应与 POST 的有效请求 URI 具有相同值的标头字段(第 3.1.4.2 节)。

据此,缓存 POST 的结果(如果服务器指示此能力)随后可以用作对同一 URI 的 GET 请求的结果。

2022-08-16