问题标签 [esi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
858 浏览

varnish - 在 Varnish 的缓存对象中使用 ESI 标记

我一直在关注这里的指南:https ://www.varnish-cache.org/docs/trunk/tutorial/esi.html

到目前为止,我的项目中有两个页面:

  1. http://127.0.0.1:3001/(缓存控制:max-age=60,私有):

    <b>Cached:</b> <%= Time.now %> <br/>

    <b>ESI:</b> <esi:include src="/staticview" /> <br/>

  2. http://127.0.0.1:3001/staticview(缓存控制:max-age=1,私有):

    <%= Time.now %>

但是,每次我请求第一页时,它似乎也会缓存 60 秒的 ESI-include 结果,而不是每秒刷新一次。

第一个请求:

第二个请求(10 秒后):

第三个请求(大约一分钟后):

这是预期的行为吗?还是我误解了文档?

我的 VCL 配置如下所示:

Varnish 使用以下参数运行:

我的 Varnish 版本是这样的(在 Mac OS X 上运行,使用来自 Homebrew repo 的 Varnish):

0 投票
1 回答
844 浏览

php - Symfony2 选择性 ESI 缓存

我正在使用Liip Cache Control 包来处理我的项目中的缓存。通过使用这个包,你可以像这样配置缓存:

现在每个 esi(内部)路由都没有被缓存。但我现在想要缓存一个内部请求。知道如何配置吗?我找不到实际用于执行此请求的路由。

亲切的问候,

大安

0 投票
1 回答
1121 浏览

varnish - Varnish ESI include only works when parent page is fetched from backend

I'm running Varnish 3.0.2, Apache2, Pressflow. I am trying to get ESI up and working for the first time, and it does work, but only the first time the parent page is requested. After that it just pulls the parent page and the replaced content from the cache. The only thing I can think of is that the included content is being cached permanently, even though I am telling it to not cache the included file at all, here is the object for the included file being stored...

I've spent a full day on this, searched, read every article I can find, tried a whole heap of config tweaking, both in the VCL and in the HTTP headers. I can't see anything I'm doing wrong.

This is a snippet from my VCL, trying to force it to not store in the cache

I would add that I am seeing nothing to inidicate errors in the varnishlog. I've tried using just the path, and host + path in the include src, but no difference. It simply won't ask the backend for fresh content. If you were looking at the logs for the second and subsequent requests, you wouldn't realise it was an ESI page.

0 投票
5 回答
894 浏览

javascript - 最安全的 javascript JSON 内联技术

我正在使用varnish+esi从 RESTFul API返回外部json内容。这种技术允许我管理请求和刷新数据,而无需为每个请求使用网络服务器资源。

例如:

包含 esi varnish 后将返回:

这工作正常,但如果 API 返回错误,此技术将生成解析错误。

我使用隐藏的 div 解析并捕获错误解决了这个问题:

我也尝试过使用脚本类型 text/esi,但浏览器会在脚本标签 (wtf) 中呈现 html,例如:

问题

为什么要包装标签并避免浏览器解析它?

0 投票
1 回答
336 浏览

symfony - 登录 ESI 组件中的缓存页面会重定向到 /_internal/secure/.../none.html

我刚刚设置了清漆,并且在投入生产之前我已经在端口 8080 上做了一些测试。

我注意到,如果我在缓存页面上:

我尝试通过包含的组件登录(不使用外部服务,但使用正常登录)ESI

它最终将我重定向到一个没有样式且没有 URL 的页面上...:8080/_internal/secure/MyBundleHomeBundle:Home:login/none.html

Step1 截图/ Step2 截图

如果我回到主页,我已经登录了。

请问我该如何避免呢?

编辑 :

0 投票
1 回答
1792 浏览

akamai - esi:include 或 esi:eval 语句的结果可以存储在 esi 变量中吗?

我想将 ESI 包含或评估块的结果存储在 ESI 变量中。包含的内容不在我的控制范围内。它的格式是 JSON。我尝试了以下所有方法均无济于事。该变量以空字符串结束。

我正在测试的 ESI 服务器是 Akamai 的 ETS。

0 投票
3 回答
1306 浏览

php - Varnish ESI 脚本可以获取位于(原始页面)上的页面吗?

我有一个用 Varnish 缓存的 PHP 页面:http://categories.php?name=NAME。它有一些 ESI 脚本,例如: < esi:include src="/esi.php" />

所有页面都有相似的页眉、页脚、侧边栏,所以我在进行 VCL 哈希时删除了 name=NAME,这样所有页面都可以获得相同的缓存。

问题是我想在 esi.php 脚本中知道哪个页面发出了 ESI 请求。是 categories.php?name=A 还是 categories.php?name=B ?

我怎样才能做到这一点?我在任何地方都没有找到这些信息。

我在想它可能在 HTTP REFERER 中,但事实并非如此。:(

0 投票
3 回答
675 浏览

php - 清漆 ESI:奇怪的字符

我在使用 Varnish ESI(Edge Side Includes)时遇到问题:有时使用 ESI 的部分会显示奇怪的字符,如下图所示:

带 ESI 的部分有时会显示奇怪的字符

我怎样才能解决这个问题?有趣的是,有时会出现这个问题,但有时不会。

0 投票
1 回答
620 浏览

drupal - 为什么我在使用 Varnish 的 ESI 片段上得到 503 服务不可用?

我已经在本地设置了 Varnish 并在页面的特定区域实现了 ESI 片段;但是,一旦我在 default.vcl 上打开 ESI,varnish 就会停止缓存,甚至更多,添加片段的页面的特定部分会呈现 503 服务不可用通知。

似乎使清漆停止缓存的行是这里的 else 语句:

这是我的 default.vcl: http: //pastebin.com/MEQF4Gbk

现在,在 RxHeaders 我得到很多“ESI_xmlerror c No ESI processing, first char not '<'”

这里是一个 RxHeaders 示例(用于 JS 文件) http://pastebin.com/tX7zpBN1

我想,我不明白如何告诉清漆只有在它有 esi 片段时才缓存?有人可以解释我做错了什么吗?

0 投票
1 回答
708 浏览

php - ESI 是阻塞还是非阻塞?

我正在计划我的缓存策略,并且我正在深入研究ESI以查看它是否符合我的需求。

今天出现了这些问题:

  • 每个包含是串行还是并行执行的?假设我有 5 个:{% render '...' with {}, {'standalone': true} %}. 我知道生成的页面将不得不等待所有这些,但是它所花费的时间会类似于最慢的包含,还是类似于所有这些包含的总和?
  • 如果答案是“串行”,有没有办法把它变成并行?
  • 我是否最好将 Ajax 用于网站的特定于用户的部分?在哪种情况下,您会选择其中一种?