-1

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

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

4

1 回答 1

1

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

GETHTTP 请求(有时除外)可以是可缓存的。要找出是否PATCH是,您可以阅读 RFC。RFC 有这样的说法:

仅当此方法的响应包含明确的新鲜度信息(例如 Expires 标头或“Cache-Control: max-age”指令)以及与 Request-URI 匹配的 Content-Location 标头时,才可缓存,表明 PATCH响应体是一种资源表示。一个缓存的 PATCH 响应只能用于响应后续的 GET 和 HEAD 请求;它不能用于响应其他方法(特别是 PATCH)。

这已经表明“不”,PATCH两次请求不会导致第二次被跳过。

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

RFC7231 对可缓存方法有这样的说法:

通常,不依赖于当前或权威响应的安全方法被定义为可缓存的;该规范将 GET、HEAD 和 POST 定义为可缓存,尽管绝大多数缓存实现仅支持 GET 和 HEAD。

这两个都表明“不”PATCH是不可缓存的,并且没有一组 HTTP 标头可以做到这一点。

于 2018-12-28T21:05:28.293 回答