问题标签 [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 投票
1 回答
1245 浏览

caching - Symfony2 ESI 缓存 + 最后修改

我正在一个 symfony2 网站上工作,我需要缓存几个页面,但有些部分必须保持未缓存(如用户菜单等)。我检查了文档,ESI 似乎正是为此而构建的。

我开始在我的项目中为我的博客文章页面实现缓存。我按照 Symfony2 文档中的建议使用 last modified 和 Etag 设置缓存验证。

我所有页面的标题中都有一个用户菜单。它使用 ESI 渲染,我确保它不会缓存。据我所见,它不起作用。我的整个博客文章页面每次都被完全缓存,连同用户菜单。它保存在浏览器缓存中,并且仅在我实际更新博客文章时才更新(这是正确的)。

这是我的博客文章控制器代码:

我的用户菜单控制器:

我的 ESI 路由

ESI 渲染:

当我加载我的博客文章页面时,我注意到用户菜单也被缓存了。我进行了更多测试,发现如果我不使用“isNotModified”,而是设置一个过期时间,ESI 确实可以工作。

有什么方法可以让 ESI 使用我在博客文章中使用的“isNotModified”结构?

谢谢

编辑:

ESI 似乎不适用于验证缓存...

请参阅此处: 使用 Symfony2 为什么会忽略缓存响应中的 ESI 标记?

0 投票
1 回答
1193 浏览

facebook - Edge Side Includes (ESI) 是否类似于 Facebook 的 BigPipe?

每个对 Web 应用程序性能感兴趣的人都知道Facebook 的 BigPipe背后的想法。

最近,Symfony 发布了一个新功能,称为Fragments 子框架

这个特性的想法是使用 ESI 技术,W3C 将其描述为ESI 语言规范 1.0

我的问题是:Facebook 的 BigPipe 是否与这种 ESI 技术相关?我可以使用 ESI 实现 BigPipe 的想法吗?

0 投票
0 回答
273 浏览

mobile - 使用 Symfony2 和 varnish 在平板电脑和移动设备上随机丢失 ESI 内容

我有一个奇怪的问题,即通过 Edge Side Include 包含的某些内容随机丢失。它是一个包含在标题标签中的菜单。有时它会显示在浏览器中,有时它会丢失。

几点注意事项:

1) 这只发生在移动设备和平板设备上。我已经能够使用默认的 android 浏览器、firefox 和 chrome for android 在 ipad、blackberry torch 和 android 手机(Samsung Galaxy s3)上重现该错误。

2)我安装了Android SDK进行调试,但没有收到任何错误。我发现的唯一一件事是每次标题丢失时,也没有设置奇怪的 cookie。然后当显示标题时,设置了 cookie。

3) 可以通过清除浏览器中的所有网络数据(cookies、缓存等)来纠正问题。

应用程序是用 Symfony2.1 编写的,反向代理服务器是 Varnish

有任何想法吗?

0 投票
1 回答
316 浏览

caching - 带有 CRSF 的表单的 Silex Esi 缓存

Silex 提供对表单自动使用 CRSF 保护的能力。问题是在使用提供的HttpCacheProvider缓存的时候不可能不缓存生成的token,所以解决方法是使用esi,但是我不能让它工作。我尝试了 2 个操作,其中一个使用包含 esi 代码和 form._token 的树枝来呈现 CRSF 令牌:

以及包含表单其余部分的操作“表单”,但现在不显示验证错误。这甚至可能吗?这是正确的方法吗?

0 投票
1 回答
1148 浏览

security - symfony2 的安全 ESI 问题

我在Symfony2 (2.2)上遇到了ESI的安全问题:

例如,我的应用程序的某些 ESI 不需要登录并且是公开的,但其他 ESI 要求用户登录并具有角色 ROLE_USER。

问题是每个人都可以通过在导航器的地址栏中写入其 URL 来显示 ESI……所以一个人可以访问 ESI(在需要管理员角色的操作中调用),甚至没有记录!

例如,我的 ESI "SybioWebsiteBundle:Controller:showEsiAction" 可以在以下 URL 读取: http ://mywebsiteurl.com/_proxy?_path=id%3D1%26slug%3Dlorem%26locale%3Dfr%26ranks%3D1-2-3 -5-6-7%26page%3D1%26isPhotograph%3D1%26_format%3Dhtml%26_controller%3DSybioWebsiteBundle%253AAlbum%253AshowEsi

这个 ESI 应该只有登录的用户才能看到:他们去 showAction,在 Twig 模板中,这个 ESI 被称为......但是由于这个“问题”,所有人都可以作弊和阅读!

我搜索了解决方案,我得到了一个非常丑陋的解决方案:检查用户是否已登录 ESI 操作……没关系,但我正在使用HTTP 缓存验证来优化我的站点加载(和内存)。所以如果我选择这个解决方案,我需要添加一个额外的 ETag 来测试用户角色,以在每次无用户访问 ESI 时清除 ESI 缓存,并显示一个空响应,如果有记录,则清除它再次显示正常视图等...

我现在想作弊的人很少,所以这可能是一个令人满意的解决方案……理论上,缓存不会因为他们而被不断清除,幸运的是!

但我想知道您是否有其他解决方案?谢谢 !

0 投票
1 回答
310 浏览

varnish - Varnish ESI 必须走不同的 src 路径?

一页有 5 个 esi:include,每个 src 是一个相同的路径,具有不同的参数,例如 'm.htm?p=1' & 'm.htm?p=2',但我使用了 varnishlog,只看到 1 个 esi 请求发生,所以我不是在多个 esi:include 标记中使用一个相同的路径吗?

0 投票
3 回答
3361 浏览

varnish - Varnish 验证缓存的请求

我有一个私人 Intranet 风格的网站,每个人都必须先登录才能看到任何内容。一旦他们登录,每个页面都是相同的 - 所以我希望这些页面缓存在 Varnish 中,但仍然需要快速的用户访问检查。

所以我想这样做,我会在我的 VCL 文件中创建一个规则,将每个传入的请求重写到一个文件。该文件不被缓存并检查用户是否有效,如果是,则打印缓存页面的 esi 包含。

这一切都很好,除了将缓存页面的第二个请求标识为经过身份验证。我正在考虑在请求中添加一个查询字符串,并检查它。或者也许有一种方法可以检查是否已通过 esi:include 发出请求。也许我以错误的方式处理这个问题?

有什么建议么?

0 投票
1 回答
4267 浏览

session-cookies - 如果启用 cookie,Symfony ESI 会破坏 Varnish 缓存

我不知道我在做什么了。我有很多问题我不知道从哪里开始。这是我的配置:

首先,我AppCache在 app.php 文件中禁用了 Symfony,该文件用作反向代理而不是 Varnish。

这是我的清漆配置:

Varnish (80) <--> Apache (8080)

因为:

Varnish 删除了公共页面的所有 Cookie 并点击了缓存,这很好但是......由于 Varnish 删除了所有我无法保持登录状态的 cookie(没有会话 cookie 意味着没有会话)。

我在没有缓存标头的 ESI 块中有登录按钮,但这仍然不能解决它。这是前端控制器:

该模板扩展了layout.html.twig

和控制器AcmeUserBundle:Default:loginBox

我不知道如何管理 Symfony 的会话 cookie。因为我在需要用户会话的每个页面上都有一个 facebook 连接按钮。而且因为 Symfony 甚至为匿名用户创建了一个 cookie,所以我对所有请求都有会话 cookie。

帮助将不胜感激:)

谢谢,马克西姆


更新:推荐后的新 VCL 文件:

现在,每个公共页面都已正确缓存。我在登录页面上的所有地方都有缓存 HIT,但现在这没什么大不了的。

我遇到的问题是标题中的 ESI 块。我可以在 apache 访问日志中看到清漆正在请求<esi:include>调用/_fragmenturl。

主页上呈现的 ESI 块不正确(它显示登录 url,就好像用户没有登录一样)但是如果我/_fragment直接调用,返回的块是正确的(带有用户信息)。

我真的不知道它来自哪里,但我很接近:)

0 投票
1 回答
570 浏览

varnish - Varnish 阻止外部源的 esi 访问

我已经启动并运行了 Varnish,并且一切正常。

但我正在使用 esi <esi:include src="/esi/cache/temp.phtml?id=1"/>,它运行良好,但我想防止外部资源可以访问 esi 目录。

现在我通过在清漆中使用req.esi_level. 如果您直接访问esi,它将为0,否则它将为n + 1

唯一的问题是,我认为/希望 Varnish 它自己可以阻止访问 esi 目录。

tl;博士你如何防止外部访问带有清漆的 esi 目录

0 投票
1 回答
1933 浏览

http - 清漆和 ESI HTTP AUTH

我对这个问题很迷茫,我不知道问题出在哪里,所以,我希望你能帮助我。

我有一个带有 symfony 的 HTTP BASIC 身份验证,我正在尝试访问一个受此身份验证保护的 URL,并在 Drupal 页面中带有一个标签。每个请求都发送到 Varnish

我在网址中提供用户名和密码,如下所示:

在我的清漆配置文件中,我只有 auth.http 的那几行:

我的 Symfony 后端在没有 http 身份验证的情况下运行良好,并且在没有 Varnish 和 esi 标签的情况下,http 身份验证运行良好。

如果有人知道这个问题,请告诉我,即使它是错误的 =)