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 / 问题 / 926154
Accepted
manifestor
manifestor
Asked: 2018-08-14 05:21:14 +0800 CST2018-08-14 05:21:14 +0800 CST 2018-08-14 05:21:14 +0800 CST

同时使用 Varnish 和浏览器缓存是否有意义?

  • 772

我对使用 Varnish 时的最佳实践有点困惑:我看到很多我知道他们正在使用 Varnish 的网站,这些网站都Cache-Control: no-store, no-cache, must-revalidate激活了 HTTP 标头。他们的网站内容很长一段时间都没有改变 - 那么他们为什么不使用浏览器缓存呢?也许他们想要更好地控制内容,如果他们需要快速更改某些内容,否则浏览器缓存中的内容会过时?

所以,基本上我想知道我是否应该利用清漆和浏览器缓存,或者只为网站提供清漆,它提供的内容不会改变?这里有什么规则,什么是“最佳实践”?通常我会选择 Varnish 和浏览器缓存,但我看到的上述网站让我对此感到困惑。

http
  • 2 2 个回答
  • 1118 Views

2 个回答

  • Voted
  1. Best Answer
    Danila Vershinin
    2018-08-14T06:37:30+08:002018-08-14T06:37:30+08:00

    你应该同时使用它们,它们是两个完全不同的东西。

    • 浏览器缓存是您计算机中的缓存。它的主要目的是保留带宽,通过使用已经看到/下载的资产来减少延迟。
    • 清漆缓存是托管网站的服务器上的缓存。其主要目的是减少服务器因运行 CPU 密集型脚本(例如 PHP)而造成的压力

    对于缓存条目/不同的缓存策略,这两个缓存可以具有不同的生命周期,这很好。这取决于您正在缓存的资源的性质。

    页面 (HTML)

    仅仅因为您Cache-Control: no-store, no-cache, must-revalidate在检查网站时看到,例如 via curl,并不意味着没有 Varnish 并且它不会缓存内容。

    以 Magento 2 为例。Magento 本身发送:

    Cache-Control: max-age=86400, public, s-maxage=86400
    

    这就是Varnish所看到的。因此该页面将被 Varnish 适当地缓存 1 天。但是,在 Magento 2 的 Varnish VCL 中,它会Cache-Control在退出时进行修改,以确保浏览器根本不缓存。因此,您将看到以下响应:

    Cache-Control: no-store, no-cache, must-revalidate, max-age=0
    

    为什么会这样:

    • 为了确保消除 PHP 引擎的繁重工作,Varnish 缓存页面并从其缓存中交付它们
    • 浏览器必须始终获取新页面(我们正在谈论产品页面等),因此它们根本不应该缓存
    • 当产品页面被更新(由管理员)时,Magento 会与 Varnish 对话以清除缓存页面。由于显而易见的原因,它不能对浏览器缓存说“从缓存中删除我”,这就是浏览器不应该缓存页面的原因

    静态资产

    在浏览器中

    您通常希望通过浏览器缓存静态资产,这就是为什么对于此类资源,您会看到 Far Future Expires 标头,如下所示:

    Expires: Sat, 03 Aug 2019 14:24:01 GMT
    Cache-Control: public, max-age=30672000
    

    在清漆

    对于这些资源,很多人喜欢配置 Varnish 不缓存它们。这是因为 PHP 没有繁重的工作来通过服务器发出这些文件,因此将它们缓存在服务器上毫无意义。特别是考虑到 Varnish 缓存默认使用 RAM 存储后端(尽管您可以为静态文件分区缓存)。

    • 3
  2. Spooler
    2018-08-14T06:25:24+08:002018-08-14T06:25:24+08:00

    “也许他们想要更好地控制内容,如果他们需要快速更改某些内容,否则浏览器缓存中的内容会过时?”

    你在那里回答了你自己的问题;)

    发布新内容以使您不一定可以控制的缓存失效时会很麻烦,并且快速使旧缓存失效对于快速推出新内容是一个很大的好处。如果您不想担心或不必担心,您可以让浏览器缓存以减少基础架构的负载。

    • 1

相关问题

  • 设置 http 代理以使用 Web 界面?

  • 无法连接到 Ubuntu Desktop 中的端口 80 或 VMWare Workstation 6.52 中的 Server 9.04

  • IIS 7.5 (Windows 7) - HTTP 错误 401.3 - 未经授权

  • 为什么有些网站的网址中没有“www”就无法显示?[关闭]

  • Tomcat 6 HTTP 日志滚动和清除

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