如果您获取图像以显示第二次或 n+1 次,或者同样获取一些 JSON,并且没有任何变化,那么浏览器实际上不应该下载/获取内容。这就是 GET 请求与缓存一起工作的方式。
但我想知道,假设您使用 PATCH 来获取图像或 JSON,而不是使用 GET。想知道如果没有任何变化,浏览器是否仍然可以使用其缓存版本,或者需要做些什么才能使 PATCH 像 GET 一样工作,这样它就不会获取缓存的内容。
如果您获取图像以显示第二次或 n+1 次,或者同样获取一些 JSON,并且没有任何变化,那么浏览器实际上不应该下载/获取内容。这就是 GET 请求与缓存一起工作的方式。
但我想知道,假设您使用 PATCH 来获取图像或 JSON,而不是使用 GET。想知道如果没有任何变化,浏览器是否仍然可以使用其缓存版本,或者需要做些什么才能使 PATCH 像 GET 一样工作,这样它就不会获取缓存的内容。
重要的是要理解这PATCH
不是为了获取任何东西。您正在服务器上进行更改,并且响应可能包含有关如何应用更改的信息。
GET
HTTP 请求(有时除外)可以是可缓存的。要找出是否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 标头可以做到这一点。