You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过AWS Lambda函数URL返回的HTML无法渲染问题求助

问题:AWS Lambda Function URL返回HTML无法被浏览器渲染

我尝试通过AWS Lambda函数URL(而非API Gateway)返回基础静态网页,但浏览器始终将响应识别为文本而非渲染HTML。使用SST进行编排,Lambda处理器采用TypeScript(Node.js)编写。

Lambda处理器代码

export const handler = async (event: any, context: any) => {
  console.log("Handler invoked");

  let content = `
<\!DOCTYPE html>
<html lang="en">
  <body>
    <h1>Hello world</h1>
    <p>Hello from my example</p>
  </body>
</html>
`;

  let response = {
    status: 200,
    headers: {
      "Content-Type": "text/html",
    },
    body: content,
  };

  return response;
};

sst.config.ts配置

new sst.aws.Function("UploadPage", {
  handler: "src/lambda/lambda.handler",
  url: true,
});

调用后,Chrome浏览器显示大量转义字符,Firefox虽无此显示但同样无法正常渲染HTML。请问需要修改代码中的哪些部分,才能让浏览器正确识别并渲染HTML?


解决方案

需要修改两处关键内容:

  • 移除HTML内容的转义字符
    当前代码中使用了<这类HTML实体转义字符,浏览器会将其解析为纯文本而非HTML标签。直接使用原生HTML语法即可:

    let content = `
    <!DOCTYPE html>
    <html lang="en">
      <body>
        <h1>Hello world</h1>
        <p>Hello from my example</p>
      </body>
    </html>
    `;
    
  • 修正Lambda响应的状态码字段名
    Lambda Function URL遵循API Gateway v2的响应格式规范,状态码字段应为statusCode而非status,否则浏览器可能无法正确识别响应类型:

    let response = {
      statusCode: 200, // 替换原有的status字段
      headers: {
        "Content-Type": "text/html",
      },
      body: content,
    };
    

完整修正后的Lambda处理器代码

export const handler = async (event: any, context: any) => {
  console.log("Handler invoked");

  let content = `
<!DOCTYPE html>
<html lang="en">
  <body>
    <h1>Hello world</h1>
    <p>Hello from my example</p>
  </body>
</html>
`;

  let response = {
    statusCode: 200,
    headers: {
      "Content-Type": "text/html",
    },
    body: content,
  };

  return response;
};

内容的提问来源于stack exchange,提问作者carbaretta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:38:22