通过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
相关产品推荐
相关产品推荐

