gpt4 book ai didi

amazon-web-services - AWS : How can I allow multiple domains in an S3 CORS configuration?

转载 作者:行者123 更新时间:2023-12-04 08:11:00 30 4
gpt4 key购买 nike

我的许多站点都遇到了问题,这些站点依赖于S3作为Cloudfront的起源。但是,我在允许多个域(而不是允许的全局*)方面遇到问题。

我遵循了文档here(第一个配置)。并在这里和那里找到了其他一些随机的SO或论坛答案(第二个配置)

任何帮助表示赞赏。

我设置了看起来像以下两个的CORS规则:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>https://example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>http://example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>https://staging.example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>http://example.dev</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>


<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>https://example.com</AllowedOrigin>
<AllowedOrigin>http://example.com</AllowedOrigin>
<AllowedOrigin>https://staging.example.com</AllowedOrigin>
<AllowedOrigin>http://example.dev</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>

我在除 https://example.com之外的所有网站 上始终收到字体来源错误:

Font from origin 'http://CLOUDFRONTURL' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://example.dev' is therefore not allowed access.





Font from origin 'http://CLOUDFRONTURL' has been blocked from loading by Cross-Origin Resource Sharing policy: The 'Access-Control-Allow-Origin' header has a value 'https://example.com' that is not equal to the supplied origin. Origin 'http://example.dev' is therefore not allowed access.

最佳答案

CloudFront会基于它已从浏览器转发到原始服务器的所有请求 header (而不只是路径)来缓存对象。

要从缓存中提供响应,必须已返回响应以响应先前请求,该请求涉及完全相同的请求 header 。

这是因为,至少在原则上,不同的 header 可以触发服务器的不同行为,并且行为良好的缓存不具有其他假设的自由。

为了提高对象的可缓存性,同时又不损害其提供正确响应的能力(即,原始服务器将为给定请求返回相同的响应),CloudFront在将请求转发到原始位置之前先剥离几乎所有请求 header ,然后使用进行高速缓存查找时,剥离了请求的版本。

当原始服务器是“自定义”(即不是S3)原始服务器时,您可以选择要转发到原始服务器的 header 。

但是,当原始服务器为S3时,您仍然可以选择,但是只有三个可以选择转发...而且它们都与CORS有关。

[With an S3 origin,] you can configure CloudFront to forward and to cache your objects based only on three headers: Access-Control-Request-Headers, Access-Control-Request-Method, and Origin. Forwarding these headers allows CloudFront to distribute content for websites that are enabled for cross-origin resource sharing (CORS). You can't configure CloudFront to forward custom headers to Amazon S3.

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web



如果至少 Origin: header 没有被转发,那么S3将无法对其作出 react 。启用此 header 的转发不仅意味着S3会看到它,而且由于存储桶上的CORS配置而有可能修改其响应,而且 Origin:的每个变体(对于同一对象)都会导致不同的结果(并且正确)响应由S3返回并由CloudFront缓存以用于将来的匹配请求。

自定义 header 无法通过CloudFront转发到S3,因为这毫无用处-由于S3存储静态内容,其他 header 的响应不会改变,因此转发它们将毫无意义,并且会降低缓存命中率,因为许多(假定)缓存了不同的响应,但仅响应与相同 header 伴随的请求而得到响应。

关于amazon-web-services - AWS : How can I allow multiple domains in an S3 CORS configuration?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34615262/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com