问题标签 [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.
php - Symfony 2.4 ESI 错误?(Debian 7 + nginx + Varnish + PHP 5.4 / PHP 5.5:ESI 不起作用 - 令人惊讶的 PHP 行为)
基本
我做了一个非常简单的测试动作:
包含的动作和树枝现在并不重要。
考试
Varnish 需要Surrogate-Control: content="ESI/1.0"
响应中的标头。看看会发生什么:
响应:
一切安好!但看看标题:
输出:
没有Surrogate-Control
标题!
\Symfony\Component\HttpKernel\HttpCache\Esi 类
有一个非常非常简单的函数,如果内容包含字符串,则添加Surrogate-Control
标题:<esi:include
但事实并非如此!如果是“真”。当我用这个打电话时:
响应:
输出:
标题在哪里Surrogate-Control
?:-o
更多测试:
和$response->headers->set('Surrogate-Control', 'content="ESI/1.0"');
(!!!) header('Test: test OK')
:
- [1] 地点:工作!
- [2]原来的地方:不起作用:(
- [3] 地点:工作!
好的。因此,如果任何标头修改位于 中IF
,则它不起作用。为什么?
魔法
当我改变条件$response->getContent()
时'test <esi:include test'
,if
一切正常。类Response
函数getContent()
:
我不明白 :-/
symfony - 如何使控制器 url 的缓存无效?
我想使 symfony2 中的 HTTP 缓存失效。我使用以下方法:
这行得通,没问题。但是当我使用 ESI 时,包括我的 controller() 函数(不是 path()),例如:
如何获取控制器函数生成的 url?或者我怎样才能使该 esi 请求的缓存响应无效?
caching - 为什么 Varnish 缓存 ESI 片段(当我告诉它不要时)?
我遇到了 Varnish ESI 的一个特殊问题。
我网站上的每个页面都有一个 ESI 片段,它会吐出(登录的)用户的帐户信息。
看起来 Varnish 正在返回用户会话 ESI 片段的缓存结果,除非浏览器发送 Cache-Control: no-cache / Pragma: no-cache(强制刷新),这是它从服务器请求 ESI 内容的时候。
我的 vcl_recv 包含绕过这个的规则:
vcl_fetch 也有一个规则:
基本上,这是浏览器端的行为:
Cache-Control: max-age=0 => Varnish 返回缓存的 ESI 片段
Cache-Control: no-cache / Pragma: no-cache => Varnish 从服务器获取 ESI 片段
我似乎无法弄清楚,我觉得我错过了一些相当明显的配置。
symfony - 使用 Edge Side 进行缓存是否包含很多小块的好习惯?
我们有很多非常小的块,我们想在 Symfony2 应用程序中包含 ESI。具体来说,它是关于显示在产品列表中的星级以及关于显示在评论列表中的用户头像和排名。因此,我们讨论列表项的非常小的信息。问题的一部分还在于这些小块不需要 URL,但是要将它们呈现为 ESI,我需要给它们一个 URL。这样做是设计缺陷吗,因为对我来说,通过 URL 公开这些块感觉就像一个设计缺陷。
symfony - 将 Edge Side Includes 放入我的模板中是一种好习惯吗?
在我们的 Symfony2 应用程序中,我们使用 render_esi 渲染可重用的块。我们有这种模板:
当然,我们也在产品的详细信息页面中使用了 render_esi。
caching - 我可以在 Varnish 中完成这个吗?
我有一个网站,通过 RSS 提要从许多不同的网站获取新闻文章。该脚本将这些文章添加到 mysql 数据库中。我在许多页面上向查看者显示每页 10 篇文章。
目前,每次更新脚本将新文章添加到数据库时,我都会缓存整个页面并清除缓存。它速度很快,但效率不高。缓存的页面只有几分钟的生命周期,尽管文章本身可以缓存更长的时间。
我可以使用 varnish 将单个文章存储在缓存中吗?因此,生成的每个页面都会有文章的链接/指针/引用,而不是文章本身。然后我可以将这些页面缓存一小段时间,同时将文章缓存更长时间。
我将如何在 Varnish 或任何其他缓存机制上执行此操作?这会在缓存命中时执行更差/相同的全页缓存吗?
我在 Ubuntu 12.04 和 nginx 上。
谢谢!
html - 带有网络路径参考
我刚刚发现<esi:include src="url" />
使用网络路径引用是不可能的;它在包含中返回错误。
是否可以包含省略协议/方案的绝对 URL?
我需要通过http或https包含页面,具体取决于调用页面的协议/方案
(所以如果我包含在http://example.com/container中,请包含http://example.com/included,或者如果我包含在https://example.com/included中,请包含https://example.com/included .com/容器)
varnish - ESI 包含在 JSON 响应中
我正在努力让 ESI 包含在 JSON 上下文中被替换。
以下工作正常。导致ESI标签被实际内容所取代。
这是行不通的。ESI 标签不会被替换。
我在谷歌上找到了一些资源,一个可能的解决方案似乎设置esi_syntax
为 0x3 以让清漆跳过检查有效 XML。这似乎不适用于 Varnish 4。当我使用运行时参数启动守护程序时,出现以下错误。
Varnish 4 中是否已弃用此设置?
有什么想法可以让这个工作吗?
symfony - 父请求和 ESI 子请求(清漆、会话需求)之间的任何通信?
我正在尝试制作清漆。
我的问题是。我确实有一个主要的请求/响应,我想使用清漆进行缓存。在 html 结构内部有一个 ESI 标签。我想拥有很多。一个带有较长 ttls 的标签,另一个带有ttl=0s
; (带有登录框的 ESI 内容)。
无论如何,我希望清漆达到主要请求,但向后端 ESI 内容询问一些信息,如标头。当 ESI 内容返回时(因为我理解首先是父请求,然后是带有 ESI 的子请求),我想要进行某种沟通。
请记住,对 beresp 所做的更改之后会存储在 obj 中。而 resp.* 变量是即将返回的内容的副本——可能是 obj 的副本。换句话说,对 beresp 的更改将影响未来的 obj.* 和 resp.* 变量。类似的语义适用于 req.* 和 bereq。. 贝雷克 是从原始请求创建的“后端请求”。它可能略有不同——例如 Varnish 可以将 HEAD 请求转换为 GET。
来自https://www.varnish-software.com/static/book/VCL_functions.html
例如:如果 ESI 子请求"X-ESI-Cookie"
在响应中有标头,我想将它传递给主响应。
我能找到任何关于 ESI 的唯一方法是reg.esi_level
.
基本上我想要实现的是:
我希望清漆缓存我的整个页面,但对于会话管理管道 ESI 内容,但为了保留会话,我需要将一些标头从子(ESI)传递给父响应(但我相信这很明显)。
我相信清漆请求(父母和 ESI 的)是分开处理的,这意味着我没有任何交流的机会。Varnish 只需将标签替换为来自 ESI 响应的 html。是这样吗?
我开始相信没有解决方案,但也许有人对这个问题有更好的解决方案:如何保留会话?我找到了一些解决方案,但没有一个适合我的需求。(我相信使用 Fake-Session,whre ID 是由 Varnish 使用一些 C 代码生成的,但没有锁定)。
我想这样做是因为采用当前的 symfony2 应用程序对我来说会容易得多。无论如何,我不敢相信 symfony2 没想到会有这种功能。除了一些小部件(ESI 内容)之外,我的页面主要是静态的。
将 ESI 内容(请求、内容和响应)添加到对象变量会非常好:
我不敢相信清漆对象没有任何关于 ESI 内容的信息。
重要的是要注意我正在寻找 *.vcl 配置中的解决方案,但任何解决方案都对我有用。
提前致谢。
symfony - ESI 缓存 - 登录 / 令牌被缓存
我在我的应用程序中使用带有 ESI 缓存(验证缓存)的 Symfony 2.4。现在我在登录时遇到了奇怪的问题。例如,当我登录一个用户时,注销然后尝试登录另一个帐户。应用程序给了我一个来自第一个用户的令牌......看起来一些与登录相关的操作正在被缓存......我不知道为什么会这样以及如何解决它......我正在使用 FOS User Bundle。
任何想法都会有所帮助,在此先感谢!