V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fstar
V2EX  ›  程序员

HTTP 请求头的 Cache-Control: no-cache 可以强制让代理服务器回源吗?

  •  
  •   fstar · 2022-05-07 23:13:32 +08:00 · 1723 次点击
    这是一个创建于 711 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我浏览器一个强制刷新就是一个 Cache-Control: no-cache (请给我最新资源)。 但作为一个 CDN 代理服务器,你老是回源不太好吧。

    一般中间代理服务器对于这种情况,底层到底怎么做的,有人知道吗?

    7 条回复    2022-05-08 13:18:40 +08:00
    lslqtz
        1
    lslqtz  
       2022-05-08 00:12:05 +08:00
    特定间隔忽略 no-cache 吧,全程忽略客户端的应该也有。
    ZE3kr
        2
    ZE3kr  
       2022-05-08 00:13:04 +08:00
    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control

    当然是用 s-maxage=<seconds>啦:

    > 覆盖 max-age 或者 Expires 头,但是仅适用于共享缓存(比如各个代理),私有缓存会忽略它。
    toneytonight
        3
    toneytonight  
       2022-05-08 08:32:35 +08:00
    静态资源的话,CDN 一般默认会忽略这种请求头的,除非在 CDN 规则中特殊配置。
    ojh
        4
    ojh  
       2022-05-08 10:09:08 +08:00
    The no-cache request directive asks caches to validate the response with the origin server before reuse.

    Cache-Control: no-cache 请求头就是告诉 CDN 去回源校验新鲜度,你说老是回源不太好是什么意思?这种方式既可以获取最新资源又省流量

    然后底层就是遵循 HTTP 的缓存机制,你提到的这种回源就是利用 Cache-Control: no-cache 响应头 + 协商缓存通用头来实现校验新鲜度的

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching
    fstar
        5
    fstar  
    OP
       2022-05-08 10:40:18 +08:00
    @ojh

    就是有一个源服务器,然后有一级代理服务器、二级代理服务器。这些代理服务器会不时去源服务器获取资源缓存下来。

    用户访问资源时,DNS 查询通过负载均衡,给用户返回一个对于用户来说最快的 IP ,假设是一个二级代理服务器。这时候用户的请求头带上了 Cache-Control: no-cache ,希望获取最新资源。

    因为对方是代理服务器,保存的是资源的副本,并不是最新资源。

    所以我就好奇这个代理服务器会不会强制请求源服务器拿到最新资源。这个缓存服务器从源服务器更新资源的过程就是回源。
    ragnaroks
        6
    ragnaroks  
       2022-05-08 11:53:46 +08:00
    边缘节点一般会无视此类控制头,因为有效的话就失去 CDN 的意义了
    ojh
        7
    ojh  
       2022-05-08 13:18:40 +08:00
    @fstar 如何按标准(正如我一开始 post 的 no-cache 定义),缓存代理服务器是会去回源校验新鲜度的。这只是标准,实际这些代理服务器会不会就不好说,因为有些代理服务器是不按标准来的或者说不支持把,比如 Nginx 就不知道部分功能
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3147 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 14:17 · PVG 22:17 · LAX 07:17 · JFK 10:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.