HTML import Amazon s3 请求的资源上不存在 'Access-Control-Allow-Origin' header

HTML import Amazon s3 No 'Access-Control-Allow-Origin' header is present on the requested resource

我正在从启用了 cors 的 cdn 加载我项目的所有资源,但是 html 导入在第一个页面加载时失败(然后在它之后加载成功)。

link(rel="import" id="htmlImports" href=`components.html` async)

产生以下错误:

s3 amazon No 'Access-Control-Allow-Origin' header is present on the requested resource.

我搜索了几乎所有相关页面并尝试了上百万个解决方案,例如:

  1. 在 s3 存储桶上添加 cors headers,有人说 range 解决了他们的问题,有人说 expose header 解决了他们的问题,我添加了所有内容并在它们之间切换,但是同样的问题。

<?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>http://*</AllowedOrigin> <AllowedOrigin>https://*</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <ExposeHeader>ETAG</ExposeHeader> <ExposeHeader>Accept-Ranges</ExposeHeader> <ExposeHeader>Content-Range</ExposeHeader> <ExposeHeader>Content-Encoding</ExposeHeader> <ExposeHeader>Content-Length</ExposeHeader> <ExposeHeader>Access-Control-Allow-Origin</ExposeHeader> <AllowedHeader>range</AllowedHeader> <AllowedHeader>*</AllowedHeader> </CORSRule> </CORSConfiguration>

  1. 在cors规范中,据说重复的cors header会导致请求失败,所以我确保没有重复。

  2. 预检请求已在服务器上启用并包含所有必需的配置(允许 headers 等)。

解决方案

我的问题的解决方案是将 crossorigin="anonymous" 添加到导入 link

link(rel="import", id="htmlImports", href=`components.html`,
     async, crossorigin="anonymous")

默认情况下 s3 存储桶发送 Access-Control-Allow-Credentials: true header,因此通过添加 crossorigin="anonymous"

Cross-origin CORS requests for the element will have the omit credentials flag set.

这将使 html 导入请求每次都有效。

备注

如果有人有替代方案或可以详细解释行为,请做!