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

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

  •  
  •   fstar · 49 天前 · 1151 次点击
    这是一个创建于 49 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    > 覆盖 max-age 或者 Expires 头,但是仅适用于共享缓存(比如各个代理),私有缓存会忽略它。
    toneytonight
        3
    toneytonight  
       48 天前
    静态资源的话,CDN 一般默认会忽略这种请求头的,除非在 CDN 规则中特殊配置。
    ojh
        4
    ojh  
       48 天前
    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
       48 天前
    @ojh

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

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

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

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