javascript – Amazon S3 CloudFront CORS问题

我们使用Amazon S3 CloudFront来提供JSON文件.我们上传了两个文件,让我们考虑为j1.json和j2.json.这两个文件最初都在响应中响应有效的CORS头,但是当在j2.json上运行失效时,它的头响应发生了变化,我们正面临CORS问题.

在S3存储桶上设置的CORS权限 –

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

j1.json的响应头

enter image description here

j2.json的响应头
enter image description here

两个JSON文件都在同一个存储桶中,但j2.json响应缺少这些标头

Access-Control-Allow-Methods →GET
Access-Control-Allow-Origin →*
Access-Control-Max-Age →3000

我们尝试删除并再次上传对象,它没有在响应中响应CORS头.这个问题的可能原因是什么?以及如何解决?

最佳答案
在S3返回正确的CORS响应头之前,需要查看该请求是否为CORS请求.

默认情况下,CloudFront将尽可能少的标头转发到原点,因为原始标记所需的标头越少,您的缓存命中率就越高(因为任何未发送到原点的标头都不会导致原点发生变化它的响应,因此预期对给定请求的所有响应都不会变化,因此可以缓存.但是对于CORS请求,我们需要S3来查看一些特定的头文件,以便它可以做出相应的反应.

在“缓存行为”配置中,您需要将这3个请求标头列入白名单以转发到源.

Access-Control-Request-Headers
Access-Control-Request-Method
Origin

一旦此更改完成,失效也可能是适当的.

转载注明原文:javascript – Amazon S3 CloudFront CORS问题 - 代码日志