CloudFront CORS headers 被缓存,导致跨源问题
CloudFront CORS headers getting cached, resulting in cross origin problems
我的网站正在从具有以下配置的 S3 存储桶加载图像:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
此 S3 存储桶已连接到具有以下 cache/origin 策略的 CloudFront 分配:
我的网站使用多个域,例如example1.com、example2.com,它完美地加载了所有图像。当某些库或 SDK 尝试访问这些图像时,问题就开始了,我有时会随机出现跨源错误。
我认为问题在于 CloudFront 缓存了源。因此,如果用户尝试从 example1.com 获取 image.jpg
,然后其他用户尝试从 example2.com 获取 image.jpg
,则 CloudFront 将原点 example1.com 缓存到请求,这将导致交叉原点。为了克服这个问题,我使用 ?v=randomInt
查询参数。这是不好的做法,因为我总是得到 image.jpg 的新副本并且实际上不使用缓存。
有没有办法不缓存来源 headers,这样 example1.com 和 example2.com 都可以用自己的来源获取 image.jpg
?我尝试从缓存策略中删除 headers,但没有成功。
报错如下(watermark.js尝试取crossorigin="anonymous"的图片后:
Access to image at 'https://cdn.treedis.com/tours/3453/tags/icons/8d2d0686-b3b9-4693-8167-0b652793c224.png' from origin example2.com has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource
一旦我将 ?v=1234
添加到图像的 URL 中,它就可以正常工作。所以一定是缓存。
因为您已经将 Origin
包含在您的缓存键中,我认为您不会再遇到这个问题。只需创建一个路径失效 /*
,问题有望得到解决。
我的网站正在从具有以下配置的 S3 存储桶加载图像:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
此 S3 存储桶已连接到具有以下 cache/origin 策略的 CloudFront 分配:
我的网站使用多个域,例如example1.com、example2.com,它完美地加载了所有图像。当某些库或 SDK 尝试访问这些图像时,问题就开始了,我有时会随机出现跨源错误。
我认为问题在于 CloudFront 缓存了源。因此,如果用户尝试从 example1.com 获取 image.jpg
,然后其他用户尝试从 example2.com 获取 image.jpg
,则 CloudFront 将原点 example1.com 缓存到请求,这将导致交叉原点。为了克服这个问题,我使用 ?v=randomInt
查询参数。这是不好的做法,因为我总是得到 image.jpg 的新副本并且实际上不使用缓存。
有没有办法不缓存来源 headers,这样 example1.com 和 example2.com 都可以用自己的来源获取 image.jpg
?我尝试从缓存策略中删除 headers,但没有成功。
报错如下(watermark.js尝试取crossorigin="anonymous"的图片后:
Access to image at 'https://cdn.treedis.com/tours/3453/tags/icons/8d2d0686-b3b9-4693-8167-0b652793c224.png' from origin example2.com has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource
一旦我将 ?v=1234
添加到图像的 URL 中,它就可以正常工作。所以一定是缓存。
因为您已经将 Origin
包含在您的缓存键中,我认为您不会再遇到这个问题。只需创建一个路径失效 /*
,问题有望得到解决。