我想了解文件的大小,以决定是否要发出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。
有任何包含此标题的想法吗?
答案 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事件触发通过直接从S3触发Lambda @ Edge(作为事件)
Lambda函数,但是使用 Lambda @ Edge 检查或修改请求或响应与S3事件无关,并且仅在CloudFront中可用