将特定的标头添加到针对AWS S3文件的HEAD响应

时间:2018-08-10 23:02:10

标签: amazon-s3 http-headers aws-lambda-edge

我想了解文件的大小,以决定是否要发出GET请求来下载文件。该文件位于我的AWS S3存储桶中。

我知道对相同的URL发出HEAD请求是一个好主意,因此尽管我的前端不支持它(在浏览器中运行的javascript代码),但它仍会返回“ Content-Length”(内容长度)

我已阅读到我需要将以下标头设置为HEAD响应:

"Access-Control-Expose-Headers": "Content-Length"

我还发现我可以使用Lambda @ Edge将此标头添加到响应中,但是我没有使用Cloudfront来提供此文件。通过直接从S3触发Lambda @ Edge(作为事件),我找不到处理HEAD请求的方法,只能在那里处理PUT,POST和DELETE。

有任何包含此标题的想法吗?

1 个答案:

答案 0 :(得分:0)

整个问题围绕着跨域资源共享-CORS。为此,您需要在存储桶上启用CORS支持。

请参见https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html

具体来说,<ExposeHeader>指令指定将在S3生成的Access-Control-Expose-Headers响应标头中显示的标头,并启用并配置CORS。

例如:

<CORSConfiguration>
 <CORSRule>

  <AllowedOrigin>https://www.example.com</AllowedOrigin>
   <AllowedMethod>HEAD</AllowedMethod>
   <AllowedHeader>*</AllowedHeader>
   <ExposeHeader>Content-Length</ExposeHeader>
 </CORSRule>
</CORSConfiguration>

还请注意,这是不正确的:

  

通过直接从S3触发Lambda @ Edge(作为事件)

可以从S3事件触发

Lambda函数,但是使用 Lambda @ Edge 检查或修改请求或响应与S3事件无关,并且仅在CloudFront中可用