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

php - Laravel 中的边缘包含

我一直在研究通过 Varnish 在 Symfony 中使用 ESI 标签,我想知道在 Laravel 中是否可以做同样的事情,如果可以,怎么做?

工作中的一位高级开发人员希望我们从 Laravel 切换到 Symfony,并且目前正在使用 ESI 标签作为进行切换的理由,这让我相信它是 Symfony 独有的,但从我所读到的内容来看,这没有任何意义它。

0 投票
1 回答
482 浏览

symfony - 清漆 symfony esi:标签删除,但没有内容

所以我的问题:我有一个很大的 symfony 项目 2.3,清漆 5。所以我想通过 symfony 函数 render_esi() 包含一些片段。毕竟问题我想了解为什么不包含任何文件,甚至只是 test.php。问题是它不包含任何内容,但标签 esi:include src"..." 我没有看到。好的,让我们看看所有配置:

Symfony:config.yml

some.html.twig:

这是我试图解雇 ESI 的三种不同方式。

清漆配置:

我检查了两个标题Surrogate-ControlSurrogate-Capability - 它们存在。

顺便说一句,我使用 nginx:https -> varnish -> nginx:http:8080 -> symfony 项目。

我花了很多时间进行实验,但我没有找到任何决定......请告诉我我的错误在哪里?

0 投票
1 回答
564 浏览

laravel - Laravel 5.3 中的 ESI 标签

对于我目前正在处理的 Laravel 5.3 项目,面包屑应该基于特定的上下文动态构建。因为我们在这个项目上需要 Varnish,所以我试图使用 ESI 标签。

我已经设置了一个呈现面包屑并在 routes/web.php 中按如下方式返回的路由:

这是控制器的样子:

在我的模板中,我将 ESI 标签定义如下:

现在,当我加载页面时,我在应该呈现 ESI 标记的位置看到文本“重定向到 /breadcrumbs”。显然,然后我会重定向到 /breadcrumbs 并查看控制器的输出。

如何停止这种重定向行为并让 Laravel 返回所需的输出?

0 投票
0 回答
1163 浏览

php - Symfony 3 中的 ESI 缓存

我在我的 Symfony 3 应用程序中启用了 ESI,我有这个app_dev.php

现在我有config.yml

在我的控制器中:

bar.html.twig这是我要缓存的视图 ( ),如下所示:

现在,我有另一种呈现主视图的方法。

我的baz.html.twig样子:

所以我想主要有非缓存视图(baz)并嵌套barAction()在其中并缓存它。

但是,我得到了:

即使我明确将其设置为公开,我也得到:

每次我刷新页面时,我都会得到:

如果我刷新无效变为有效。但我无法设置缓存。

编辑:

我阅读了有关 ESI 和验证缓存的信息,似乎它们不能一起工作。所以我尝试了验证缓存并添加了

而不是 ETag。结果还是一样...

0 投票
0 回答
284 浏览

wordpress - Varnish 不为 Wordpress 后端处理 ESI

问题: 当通过 Wordpress 调用 URL 时,Varnish (ver 3.0) 似乎无法处理 esi。

背景: 想法是缓存文章页面或任何静态页面(Wordpres 站点)更长的时间,但对于某些动态小部件。为此,我们设置编写了一个php页面,通过single.php和header.php生成侧边栏和菜单页面。这些还将包括一个名为“Set-Esi”的标题。

如果 Varnish 检测到标头的存在,它将处理 ESI。

测试: 我们在站点的根目录中添加了一个 php 页面。让我们说'esitest.php'。在这个页面中,我们有标题,调用小部件菜单并回显日期时间以进行测试。

PHP测试页面代码

Varnish VCL(在 vcl_fetch 下,ver 3.0):

结果:

  1. 测试 php url 按预期工作。IE。http://domain.com/esitest.php
  2. Wordpress url 没有处理 esi include。esi:remove它在标签下显示内容。但是 ttl 显示 15 分钟,如果标题存在则设置。这意味着它会通过 vcl 中进行 esi 处理的循环。

注意:我们使用 batcache 和 memcache 存储、Nginx Web 服务器(禁用 gzip)。

0 投票
1 回答
291 浏览

varnish - Varnish 4 ESI:bereq.url 不读取 ESI src 标签内的 url

我使用清漆 4、php-fpm 7、nginx、centos 7

我的清漆参数:

我的默认.vcl:

我的问题是当我使用通过访问触发的 vcl 代码时说:http://localhost/lab/varnish

哪个渲染:

Varnish 没有读取 ESI 标签内的 url src,所以它只是渲染一个空的 body。

但是当我使用这段代码时:

Varnish 成功渲染了 ESI 标签内的内容,该标签由: http://localhost/lab/esi/body生成

如何使 Varnish 基于识别 ESI“src”标签中的内容来触发 ESI 片段渲染?

我已经尝试设置 Surrogate-Capability 并使用 Surrogate-Control 检查,对我来说它也不起作用。我没头绪了。。

0 投票
0 回答
277 浏览

caching - 使清漆缓存成为失败 ESI 的综合响应

我们使用 varnish 4 来缓存和处理 ESI。对于返回 5XX 后端错误的 ESI 请求,我们返回一个空的合成响应。

该空响应应该被缓存几秒钟,因为当前对同一 ESI 的每个后续请求都会再次命中后端。每当 5XX 响应的原因是昂贵的原因时,这都会导致我们的后端负载过重。

我们试图Retry-After在响应中添加一个标头,但这并不能解决问题。

0 投票
0 回答
515 浏览

varnish - 如何在 Varnish 中使用 ESI 包含来自另一方的内容

我想在 Varnish 中使用 ESI 来组合来自不同方面的内容。每一面都是一个带有小前端片段的小型微服务。ESI 应该使用不同的片段构建页面。

我将使用 Varnish 4.0.5。只要我将它用于我身边的内容,它就可以正常工作。

这是我的vcl

我将在浏览器中得到以下结果

当我也在 VCL 中定义外部主机时

我将从外部站点获取一些内容(不会提供静态资源,因此会导致浏览器出错)

问题 - 有没有一种方法可以在不将每个外部站点都定义为后端的情况下从外部站点获取内容?

0 投票
0 回答
201 浏览

cookies - 如何配置 Varnish 根据 Vary 响应标头有条件地忽略 cookie?

我正在使用 Varnish 3 缓存来自使用 Edge Side Includes (ESI) 的 Web 应用程序的响应。

来自 ESI 端点的响应通常有两种类型:

  • 有些是特定于身份验证的,因此使用响应Vary: Cookie, Accept-Encoding
  • 无论cookies如何,一些都会为所有用户缓存,因此响应Vary: Accept-Encoding(不因cookie而异)

所有请求都包含Cookie带有各种 cookie 的标头。没有标头的请求以Cookie响应Set-Cookie。请注意,来自例如 Google Analytics 的 - 前缀 cookie 不是这种情况__- 这些是由旧应用程序设置的 cookie,我无法更改此行为。

有没有办法*配置 Varnish 3 以记住来自各个 ESI 端点的响应不会因 cookie 而异,因此未来的请求应该Cookie完全忽略标头并使用缓存的响应而不是从后端获取新的响应?

(*) 除了将 URI 硬编码到 Varnish 配置中之外,我正在寻找一种方法让 Varnish 尊重包含 cookieVary的请求的cookie 标头。

0 投票
1 回答
1128 浏览

c# - 使用 Newtonsoft 创建无效 Json - 允许无效对象?

我故意尝试使用 Newtonsoft Json 创建无效的 JSON,以便放置一个 ESI 包含标签,这将获取另外两个 json 节点。

这是我的 JsonConverter 的 WriteJson 方法:

mApiResponseClass 中的 EsiObj 只是一个字符串,但需要将其写入 JSON 响应以在没有任何属性名称的情况下进行解释 - 以便 hte ESI 可以工作。

这当然会导致 Json Writer 出现异常,其值为:

Newtonsoft.Json.JsonWriterException:'状态对象中未定义的令牌将导致无效的 JSON 对象。小路 ''。'

有没有办法解决?

一个理想的输出应该是 JSON 格式的,技术上是无效的,看起来像这样:

编辑: 使用 ESI 允许我们对单个响应具有不同的缓存长度 - 即我们可以将可以缓存很长时间的数据放在 JSON 的某些部分中,并且只获取更新的部分,例如那些依赖于客户端的部分- 特定数据。ESI 不是特定于 HTML 的。(如下文所示)它通过支持这些标签的 Varnish 运行。不幸的是,我们要求我们只发布 1 个文件作为响应,并且不需要客户的进一步请求。我们也不能改变我们的响应——所以我不能只添加一个 JSON 节点来专门包含其他节点。

编辑 2: “更多 json 节点”部分通过 ESI 向我们的后端进一步请求用户/客户端特定数据(即向另一个端点)解决。预期的结果是我们随后将原始 JSON 文档和后来请求的文档无缝地合并在一起。(这样,原始文档可以是旧的,而客户特定的可以是新的)

编辑 3: 端点 /something 将输出类似 JSON 的片段,例如:

对于以下的总响应: