【发布时间】:2020-09-11 22:42:02
【问题描述】:
是否有可能(没有请求的应用层缓存)在可缓存的情况下防止多次发送对同一资源的 HTTP 请求?如果是,如何?
例如而不是
at time 0: GET /data (request#1)
at time 1: GET /data (request#2)
at time 2: received response#1 for request#1 // headers indicate that the response can be cached
at time 3: received response#2 for request#2 // headers indicate that the response can be cached
at time 0: GET /data (request#1)
at time 1: GET /data (will wait for the response of request#1)
at time 2: received response#1 for request#1 // headers indicate that the response can be cached
at time 3: returns response#1 for request#2
这要求它可以在读取响应标头之前向浏览器指示响应是可缓存的。请问有没有这样的机制。例如。带有前面的 OPTIONS 或某种 HEAD 请求。
【问题讨论】:
-
我认为你说的“你能在发送之前知道 HTTP 响应是可缓存的吗”,不。还有,你为什么会想要这个?
-
我在问,我能否向浏览器表明响应是可缓存的。或者我可以请求只让浏览器知道响应是可缓存的。例如。一个 HEAD 请求。
-
你的初始响应可以设置一些cache headers来告诉浏览器它应该使用这个响应而不是每次都请求一个新的
-
HTTP HEAD 方法请求将返回的标头,如果 HEAD 请求的 URL 是使用 HTTP GET 方法请求的。 Source
-
所以是的,那么“HTTP HEAD 方法请求将返回的标头,如果 HEAD 请求的 URL 是使用 HTTP 请求的”,缓存控制标头位于标头中,因此它们将被包含在内。我猜浏览器不倾向于这样做,因为它效率低下。提出一个请求比提出两个请求更有效。我不是该请求的负责人,所以我猜测(我已经使用 HTTP 15 年了)它很少使用
标签: javascript http http-headers http2 http-head