gpt4 book ai didi

http - 我应该使用哪些 HTTP 客户端 header 来指示代理从源重新获取并缓存响应?

转载 作者:可可西里 更新时间:2023-11-01 16:38:14 24 4
gpt4 key购买 nike

我目前正在开发一个客户端向源服务器发出 HTTP 1.1 请求的系统。我同时控制客户端和服务器软件,因此可以自由支配 HTTP header 集。客户端之间是多个分层的 Web 代理/缓存设备(思考、Squid 或类似设备)。

源提供的数据通常是高度可缓存的,我打算设置 HTTP 响应 header 来表明这一点。具体来说,我打算使用 Cache-Control: public, max-age=<value> .我知道这意味着中间代理会将响应缓存到指定的 max-age。 ,此时他们将根据来源重新验证(可能使用 Last-Modified header ,寻找 304 响应)。

我遇到的问题是客户端可能会意识到缓存保存的数据现在可能无效。在这种情况下,我需要客户端发出一个请求,指示缓存获取或重新验证其对来源的响应。如果原始响应现在不同,则缓存应存储此新响应。在我看来,这将涉及客户端发出请求,并且链中的每个缓存都应该通过下一个上游设备重新验证其响应,一直返回到源。然后可以从实际拥有它的最近缓存提供新响应。

要实现此目的,需要在客户端请求上设置哪些正确的 HTTP header ?起初我以为设置 Cache-control: no-cache在 HTTP request 中会发生这种情况,但阅读 RFC,似乎这将指示中间缓存既返回到原点(所需的)但也不缓存新的响应(不需要的) ).然后我看到一篇文章,其中的 HTTP 请求 header 为 Cache-control: max-age=0也许会这样做,但我不确定。

威尔max-age=0在这里做我需要的,还是我需要一些其他的 HTTP header 组合?

最佳答案

我在这里问了一个类似的问题:How to make proxy revalidate resource from origin .从那以后,我了解到在撰写本文时 nginx 不支持代理重新验证。它预定用于 1.5 release .

如果来自源的原始响应包含正确的缓存控制 header ,则从客户端发送 max-age=0 应该会在代理中触发此重新验证机制。

但是您的上游服务器是否会尊重这些 header 并重新验证其来源显然不是您可以假设的事情。如果您可以控制上游服务器,我认为它可以工作。

自从标题 afaik 以来,etag 也优于修改。

我发现这些文章对这个主题很有帮助:

caching tutorial

cache control directives

http specs on validation

section 14.9.4 on this spec

[更新]Nginx 版本 1.5.8 已经发布,我可以确认这个机制现在正在工作!

关于http - 我应该使用哪些 HTTP 客户端 header 来指示代理从源重新获取并缓存响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18653232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com