如何使用AWS CloudFront运行Lambda@Edge函数修改页面的HTML?

6

我正在运行一个CloudFront分发,其中有一个Lambda@Edge函数在其中运行。

我想操作CloudFront所在页面的DOM。具体示例:向中添加自定义脚本。

Cloudflare上,可以使用他们的HTMLRewriter class轻松完成这项任务(大致相当于产品)。

如何在AWS CloudFront上实现此功能?

我的工作理论是:

  • 观察HTML页面的请求
  • 对响应的正文进行某种操作-将其解析为DOM对象并进行必要的操作

我尚未成功实现此操作。如果我漏掉了什么或者有其他方法,请告诉我。

2个回答

1

对请求的正文进行替换,其中uri === '/',以修改HTML字符串。

我尝试过了,它运行良好。

uri === '/'的请求应该是HTML页面的请求。

因此,在我的特定情况下,我只是在该请求的body上执行了一个replace(这是序列化的HTML字符串):

body.replace(
      `</head>`,
      `<script>
      console.log('my script')
      </script></head>`
    )

这个方法是可行的。

你也可以引入一些DOM解析库,以更加优雅的方式进行操作。


3
您能让此项工作适用于响应触发器吗?但这篇文章说这是不可能的:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-updating-http-responses.html “当您使用HTTP响应时,Lambda@Edge不会向origin-response触发器公开由服务器返回的正文。”您是如何设置这个的呢? - jameslk
2
@lou1989,你能提供一个Lambda@Edge函数的代码片段吗? - Kevin Wang

-3
我创建了一个方法,可以使用@lou1989的响应在<header><body>中添加GTM脚本。这里是代码和一些说明。

3
你提供的链接很好。 - elliottregan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接