0

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

我知道向同一个 URL 发出 HEAD 请求是个好主意,因此它会返回“Content-Length”,尽管我的前端无法使用它(在浏览器上运行的 JavaScript 代码)

我读过我需要将下面的标题设置为 HEAD 响应:

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

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

包含此标题的任何想法?

4

1 回答 1

1

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

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

具体来说,该<ExposeHeader>指令指定将出现在Access-Control-Expose-HeadersS3 将生成的响应标头中的标头,并启用和配置了 CORS。

例如:

<CORSConfiguration>
 <CORSRule>

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

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

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

Lambda 函数可以从 S3 事件触发,但使用Lambda@Edge检查或修改请求或响应与 S3 事件无关,只能在 CloudFront 中使用。

于 2018-08-11T15:18:18.490 回答