如果浏览器可以缓存 PATCH 请求

If the browser can cache PATCH requests

如果您获取图像以显示第二或 n+1 次,或者类似地获取一些 JSON,并且没有任何变化,那么浏览器实际上不应 download/fetch 内容。这就是 GET 请求与缓存一起工作的方式。

但我想知道,假设,如果不使用 GET 而使用 PATCH 来获取图像或 JSON。想知道如果什么都没有改变,浏览器是否仍然可以使用它的缓存版本,或者需要做什么才能使 PATCH 像 GET 一样工作,这样它就不会获取缓存的内容。

重要的是要了解 PATCH 不是为了 获取 任何东西。您正在服务器上进行更改,响应 可能 包含有关如何应用更改的信息。

GET 以外的 HTTP 请求有时可以缓存。要确定 PATCH 是否存在,您可以阅读 RFC。 RFC 是这样说的:

A response to this method is only cacheable if it contains explicit freshness information (such as an Expires header or "Cache-Control: max-age" directive) as well as the Content-Location header matching the Request-URI, indicating that the PATCH response body is a resource representation. A cached PATCH response can only be used to respond to subsequent GET and HEAD requests; it MUST NOT be used to respond to other methods (in particular, PATCH).

这已经建议 'no',执行两次 PATCH 请求不会导致第二次被跳过。

使用 HTTP 方法要注意的第二件事是它们是幂等的还是安全的。 PATCH 两者都不是。

RFC7231 关于可缓存的方法是这样说的:

In general, safe methods that do not depend on a current or authoritative response are defined as cacheable; this specification defines GET, HEAD, and POST as cacheable, although the overwhelming majority of cache implementations only support GET and HEAD.

这两个都表明 'no'、PATCH 不可缓存,并且没有一组 HTTP headers 可以做到这一点。