Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果HTTP请求缓存控制头与响应缓存控制头不同,会发生什么情况_Http_Web_Caching_Http Headers_Frontend - Fatal编程技术网

如果HTTP请求缓存控制头与响应缓存控制头不同,会发生什么情况

如果HTTP请求缓存控制头与响应缓存控制头不同,会发生什么情况,http,web,caching,http-headers,frontend,Http,Web,Caching,Http Headers,Frontend,请参见上面的屏幕截图。响应标头的缓存控制设置为“最大使用年限”,这意味着资源被视为新鲜的最长时间。我相信,如果我们在时间范围内提出请求,浏览器将提供本地副本,而无需费心询问服务器。请求头的缓存控制设置为无缓存,这意味着 响应可以由任何缓存存储,即使请求通常是 不可缓存。但是,存储的响应必须始终通过 在使用源服务器之前,首先与源服务器进行验证 所以这里我们有一个矛盾。在这种情况下,浏览器是否符合哪个缓存控制指令,即,浏览器是否会在每次按缓存建议触发请求时与服务器进行验证,或者如果请求在最长期限的时

请参见上面的屏幕截图。响应标头的缓存控制设置为“最大使用年限”,这意味着资源被视为新鲜的最长时间。我相信,如果我们在时间范围内提出请求,浏览器将提供本地副本,而无需费心询问服务器。请求头的缓存控制设置为无缓存,这意味着

响应可以由任何缓存存储,即使请求通常是 不可缓存。但是,存储的响应必须始终通过 在使用源服务器之前,首先与源服务器进行验证


所以这里我们有一个矛盾。在这种情况下,浏览器是否符合哪个缓存控制指令,即,浏览器是否会在每次按缓存建议触发请求时与服务器进行验证,或者如果请求在最长期限的时间范围内,浏览器是否不会与服务器进行验证没有矛盾。请求上的无缓存告诉任何中间服务器,它们无法使用缓存副本进行响应;他们必须联系原始服务器。反应的最大年龄告诉客户它能考虑多长时间的反应是新鲜的。请注意,询问浏览器是否符合请求头是没有意义的;它是创建请求头的程序


更一般地说,要点是头在请求和响应上的含义不同。这在MDN文章中并不明显,但在中详细说明了区别

我还是不明白。如果前端代码(即客户端javascript)添加了一个缓存控制头,其中包含一个max-age,这是否意味着响应会被自动缓存?还是取决于服务器端的缓存控制头?@Joji:在你的截图中,max age是响应头的一部分。所以它是由服务器设置的,而不是客户端javascript。您好,谢谢您的回复。我知道在我的截图中它是由服务器端设置的,但我想知道客户端是否也可以设置。如果客户端设置了最大年龄,而服务器没有设置,该怎么办?@Joji:Request和response头的含义不同,因此这种情况不会有什么异常。请参阅我链接到的规范,其中描述了这些不同的含义。在这种情况下,请求max age将告诉服务器或任何中间缓存客户端愿意接受来自它们的响应的最新程度。反应的最大年龄或缺乏告诉客户多久它可以认为响应新鲜。