AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 615418
Accepted
port5432
port5432
Asked: 2014-07-25 23:55:24 +0800 CST2014-07-25 23:55:24 +0800 CST 2014-07-25 23:55:24 +0800 CST

Squid 如何知道它的缓存是否经过验证

  • 772

在反向代理模式下,Squid 可以缓存来自网络中设备以前访问过的网站的内容。

如果远程站点上的内容以某种方式发生变化(可能是通过代码推送)会发生什么?Squid 如何知道它需要访问原始站点来获取资产的新版本,而不是缓存?

现在对于基于动态 javascript 的(单页)网站来说,这是否是一个更大的问题?

一个附带问题:“反向代理”与 Squid 的“加速器模式”本质上是一样的吗?

reverse-proxy
  • 1 1 个回答
  • 2136 Views

1 个回答

  • Voted
  1. Best Answer
    HBruijn
    2014-07-26T01:15:12+08:002014-07-26T01:15:12+08:00

    是的,Squid 将使用解释后端服务器随每个响应发送的标头的传统方法缓存来自后端服务器的响应。

    不应缓存的动态内容的典型响应如下所示:

    Expires: Fri Jul 25 10:19:36 CEST 2014 GMT
    Cache-Control: max-age=0, no-cache, no-store
    Pragma: no-cache
    

    从技术上讲,这些标头中的每一个本身已经足以声明响应动态的内容,但传统观点似乎仍然使用它们。货物崇拜编程或向后兼容性?

    Cache-Control是您最应该关心的标题。这些是您的 Squid 反向代理以及任何中间缓存代理服务器(包括实际浏览器)的缓存说明。选项包括:

    • private或public;私有响应是特定于用户的,不应被缓存,公共响应可能会被缓存。
    • no-cache主要做它听起来的样子,并且是为每个后续请求重新验证资源的指令。尽管在验证证明资源仍然有效之后,仍然可以提供缓存的响应。
    • no-store一个明确的指示,即响应必须被视为机密并且根本不存储,比上面的 no-cache 选项强一点。
    • max-agein seconds 覆盖 Expires 标头并指示资产何时过期并应从缓存中清除。
      • s-maxage在几秒钟内与上述相同,但对于内容交付网络等共享缓存。

    Expires是设置缓存指令的经典方式,简单的时间戳不超过未来1年。

    Pragma是一个非常老派的标头,将其设置为no-cache将被任何最近的浏览器解释为Cache-Control: no-cache并且我认为它不再出现在最近的 HTTP 协议规范中,尽管仍然因历史的向后兼容性而受到尊重。

    为更多静态内容设置的标头应指示 Squid(以及访问者的 Web 浏览器)可以缓存这些响应。

    Cache-Control: no-transform,public,max-age=300,s-maxage=900
    Content-Type: text/html; charset=UTF-8
    Date: Fri Jul 25 10:19:36 CEST 2014 GMT
    Expires: Sat Jul 26 10:19:36 CEST 2014 GMT
    

    问题是除非您手动刷新 Squid 缓存内容,否则对象将在其缓存控制标头的持续时间内存储。Squid 没有您在 Varnish 中找到的规定,也没有软件 CDN 用于履行 PURGE 请求以使特定缓存对象无效的规定。

    解决方法是让您的内容管理解决方案确保对静态内容的更新带有新的文件名,而不是覆盖现有文件。

    当然,您的本地配置可以覆盖标题中设置的说明。

    是的,在 Squid 上下文中,反向代理和网络加速器是一回事。

    • 4

相关问题

  • 反向代理设备[关闭]

  • 清漆配置仅缓存未登录用户

  • Varnish 缓存如何处理不同的域?

  • Varnish 与其他反向代理

  • 内省 Varnish 的工具

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve