【问题标题】:what happened if the HTTP request cache control header is different than the response cache control header如果 HTTP 请求缓存控制标头与响应缓存控制标头不同会发生什么情况
【发布时间】:2020-07-23 12:44:33
【问题描述】:

请参阅上面的屏幕截图。响应头的缓存控制设置为max-age,这意味着资源被认为是新鲜的最长时间。我相信如果我们在时间范围内发出请求,浏览器将提供本地副本而无需询问服务器。并且请求标头的缓存控制设置为no-cache,这意味着, according to MDN,

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

所以这里我们有一个矛盾。在这种情况下,浏览器是否符合哪个缓存控制指令,即每次请求触发时它都会与服务器进行验证,如on-cache 建议的那样,或者如果请求在@987654327 的时间范围内,它是否不会与服务进行验证@

【问题讨论】:

    标签: http web caching http-headers frontend


    【解决方案1】:

    没有矛盾。 request 上的no-cache 告诉任何中间服务器 他们不能用缓存的副本进行响应;他们必须联系原始服务器。 response 上的 max-age 告诉 client 它可以在多长时间内认为响应是新鲜的。请注意,询问浏览器是否会“符合”请求标头是没有意义的;它是创建请求标头的那个。

    更一般地说,重点是标头在请求和响应中的含义不同。这在 MDN 文章中并不明显,但在 the specification 中说明了不同之处。

    【讨论】:

    • 我还是不明白。如果前端代码,即客户端 javascript 添加一个缓存控制标头,其中包含 max-age,这是否意味着响应会自动缓存?还是取决于服务端的缓存控制头?
    • @Joji:在您的屏幕截图中,max-age 是响应标头的一部分。所以它是由服务器设置的,而不是“客户端javascript”。
    • 您好,感谢您的回复。我知道在我的屏幕截图中它是由服务器端设置的,但我想知道客户端是否也可以设置它。如果客户端设置了 max-age 而服务器没有设置呢?
    • @Joji:请求和响应标头的含义不同,因此这种情况并没有什么不寻常的地方。请参阅我链接到的规范,其中描述了这些不同的含义。在这种情况下,请求max-age 将告诉服务器(或任何中间缓存)客户端愿意从它们那里接受的响应有多新鲜。响应 max-age(或没有)告诉客户端它可以认为该响应是新鲜的多长时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 2017-06-01
    • 2021-10-20
    • 1970-01-01
    • 2020-07-17
    • 2021-11-29
    相关资源
    最近更新 更多