问题标签 [edge-side-includes]

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 回答
1127 浏览

http - nginx的边缘包含模块?

有人知道 nginx 的 ESI 1.0 实现吗?

0 投票
1 回答
135 浏览

xml-parsing - 解析非 XML 文件中的 XML 块

任何人都可以分享解析嵌入在非 XML 文件中的 XML 块的经验吗?

我正在实现 Edge-Side-Includes[1] 处理器。Edge-Side-Includes 元素不一定嵌入在 XML 或格式良好的 XML 文件中,这就提出了一个问题,即如何查找并解析这些元素。

有没有人做过类似的事情?

[1] http://www.w3.org/TR/esi-lang

0 投票
1 回答
237 浏览

varnish - 清漆 ESI 以获取大量信息

我有一个标准的博客类型应用程序,其中包含可以将这些帖子添加到他们的收藏夹的帖子和用户。

目标

  1. 当用户查看帖子列表时,他们应该看到每个帖子是否是收藏夹的指示(图像)。匿名用户没有任何收藏夹。
  2. 帖子列表需要缓存在 Varnish 中(对于匿名用户和登录用户),因为计算成本很高。

想法

在 Varnish 中缓存列表页面并使用 ESI 获取收藏夹信息...

  1. ...对于发出当前请求的用户的每个帖子。缺点:每页 50 个 ESI 请求(基本上是N+1 问题)。
  2. ... 作为 JSON 对象,然后存储在页面上。在客户端,读取此对象并操作 DOM 以指示收藏夹信息。缺点:不适用于没有 Javascript 的用户。
  3. ...作为存储在页面中的 CSS 片段。CSS 确定每个帖子要显示的内容。缺点:仅适用于可样式化的内容(即图像)。无法显示文本信息。

我是否错过了实现我想要的任何可能性?想法 3 似乎是最聪明的答案,但如果我还想显示用户收藏帖子的日期,它就行不通了。

0 投票
1 回答
1792 浏览

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

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

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

0 投票
3 回答
10385 浏览

https - 将 Varnish 与 SaaS HTTPS 后端服务器一起使用?

我想将 Varnish 配置为使用 HTTPS(!) 服务作为后端服务。这里的关键是与后端服务连接的 SSL 部分!我对这些 HTTPS 后端服务的控制有限(将它们视为托管在云中的 SaaS 服务)。

它是这样的设置:用户代理 -> AWS ELB 作为 SSL 终结器 -> AWS 中的 Varnish -> 云中的 HTTPS SaaS 服务

其原因如下: - 我想使用 Varnish ESI 用我自己的自定义页眉和页脚来装饰 SaaS 服务 UI。- 通过让所有请求都通过 Varnish,我可以获得有关 SaaS 服务的额外分析数据,否则我将无法获得 - 我可以使用 Varnish 重写 SaaS 服务的 URL,从而有效地向最终用户隐藏 SaaS 服务 URL

我可以将 AWS ELB 用作用户代理的 SSL 终结器,但是如何让 Varnish 将 HTTPS SaaS 服务作为源服务器访问?

背景:我在一个门户网站上工作,我们将在其中向我们的客户展示许多不同的服务(所有服务都有自己现有的 UI,即它们没有无头 RESP API!)。将所有这些服务整合在一起的主要内容是一个通用的页眉和页脚(页眉显示顶级导航和登录名/用户名注销)。

我们拥有的服务类型如下,它们都有自己的 UI 层,我们不想复制它们: - 托管在云中的白标 3rd 方 SaaS 服务(例如 Zendesk 或 Salesforce) - 内部开发托管在 AWS 中的 JavaEE/Spring 服务 - 我们公司其他团队开发的服务,但它们托管在我们自己的数据中心

添加 ESI 包含对于这些服务中的每一个都很好,但我不想为每个服务重复多次重新实现页眉/页脚的工作。

0 投票
0 回答
449 浏览

ruby-on-rails - 在 Rails 4 中,如何实现 Edge Side Include 和 HTTP Cache Reverse Proxy 行为?

我来自 Symfony2 PHP,目前正在迁移到 Rails 4,我对 Rails 3 及之前的版本一无所知。我正在使用最后一个待办事项列表来处理我的 web 项目,以在此 rails 4 中启用动态缓存。在 Symfony2 中,有内置功能可以轻松设置 Edge Side Include 行为。其中一些功能:

  1. Sf2 具有模板功能以插入<esi:include src="http://..." />带有路由器名称作为参数的esi include 标签

http://symfony.com/doc/current/book/http_cache.html#using-edge-side-includes

{{ render_esi(url('latest_news', { 'max': 5 })) }}

  1. Sf2 内置了反向代理网关,以将具有 esi 标签的缓存页面与来自每个包含的 esi 标签 url 的相应响应合并。

http://symfony.com/doc/current/book/http_cache.html#edge-side-includes Symfony2 带有一个用 PHP 编写的反向代理(也称为网关缓存)。启用它,您的应用程序的可缓存响应将立即开始缓存。安装它同样简单。每个新的 Symfony2 应用程序都带有一个预先配置的缓存内核 (AppCache),它包装了默认的 (AppKernel)。缓存内核是反向代理。

我有学习页面、动作、片段缓存。我还找到了 Rack::ESI。我知道有middleware成语,但我不知道它是什么。我仍然不知道如何正确设置所有这些信息。我的 esi 标签不会像 Sf2 中那样替换为来自 esi 标签 url 的相应响应。我认为这是因为我没有在 Rails 中配置反向代理中间件。所以我的问题是,在 Rails 4 中,如何实现 Edge Side Include 和 HTTP Cache Reverse Proxy 行为?

问候。

0 投票
1 回答
415 浏览

html - 带有网络路径参考

我刚刚发现<esi:include src="url" />使用网络路径引用是不可能的;它在包含中返回错误。

是否可以包含省略协议/方案的绝对 URL?

我需要通过httphttps包含页面,具体取决于调用页面的协议/方案

(所以如果我包含在http://example.com/container中,请包含http://example.com/included,或者如果我包含在https://example.com/included中,请包含https://example.com/included .com/容器

0 投票
0 回答
526 浏览

reactjs - 在通用 React 应用程序中等效于边缘侧

我有一个通用的 React 应用程序。在其中一个页面中,我想包含来自另一台服务器的一些 HTML -边缘端包含(ESI)已被提及,但这种方法似乎与 Universal React 应用程序不兼容,因为:

  1. 我们可能无法重新创建包括客户端在内的 Edge 端的功能,至少在不向浏览器显示外部 URL 的情况下是这样。我想我们可以在我们的服务器上创建一个代理页面来执行此操作,并在执行此客户端时通过 AJAX 加载 html 片段,但这仍然给我们留下了第二个问题......
  2. 使用 ESI 意味着在 CDN 服务器上进行处理时,将非 React DOM 内容注入到 React 应用程序已经(服务器端)渲染的 DOM 中。我很确定这会使 data-react-checksum 无效,我想不出办法来避免这种情况。

是否有可以使用的替代的、React 友好的、通用的渲染方法?

0 投票
1 回答
274 浏览

curl - 爬虫/CURL 看到边缘站点包括

我正在尝试通过 curl/wget 检索网站,但我看到的是 ESI 标签,而不是我在浏览器中看到的真实内容。

URL 是http://www.patagonia.com/home/?setCountryCode=US&setLocaleCode=en_US&setLocaleCodeSelect=en

我已经通过邮递员尝试过,只发送 Accept 和 Connection cookie,我看到了正常的 HTML 结果。我不太确定发生了什么。有没有人知道要发送什么标头或 wget/curl 要做什么才能正确获取页面?

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)。