上次更新时间:2021 年 1 月 19 日
我在转发 Amazon CloudFront 分配的源标头时收到错误“No 'Access-Control-Allow-Origin' header is present on the requested resource”。 如何解决此错误?
简短描述要避免出现错误“No 'Access-Control-Allow-Origin' header is present on the requested resource”,请验证以下内容:
源的跨源资源共享 (CORS) 策略允许源返回“Access-Control-Allow-Origin”标头。 CloudFront 分配转发相应的标头。 CloudFront 分配的缓存行为允许 HTTP 请求的 OPTIONS 方法。 解决方法 源的 CORS 策略允许源返回“Access-Control-Allow-Origin”标头运行如下类似 curl 命令,检查源是否返回“Access-Control-Allow-Origin”标头:
curl -H "origin: example.com" -v "https://www.anything.net/video/call/System.generateId.dwr"
如果 CORS 策略允许源返回标头,则该命令会返回类似于以下内容的消息:
HTTP/1.1 200 OK
Server: nginx/1.10.2
Date: Mon, 01 May 2018 03:06:41 GMT
Content-Type: text/html
Content-Length: 3770
Last-Modified: Thu, 16 Mar 2017 01:50:52 GMT
Connection: keep-alive
ETag: "58c9ef7c-eba"
Access-Control-Allow-Origin:
example.com
Accept-Ranges: bytes
要为 NGINX 上的源更新 CORS 策略,请参阅 CORS on NGINX 了解相关说明。要在 Amazon Simple Storage Service (Amazon S3) 存储桶作为源的情况下更新该策略,请参阅启用跨源资源共享 (CORS),了解相关说明。
CloudFront 分配转发相应的标头在源上设置 CORS 后,将 CloudFront 分配配置为转发源所需的标头。如果您的源是 S3 存储桶,通常必须将分配配置为将以下标头转发至 Amazon S3:
Access-Control-Request-Headers Access-Control-Request-Method Origin要使用缓存策略转发标头,请执行以下步骤:
-
按照使用 CloudFront 控制台创建缓存策略的步骤操作。
在 Cache key contents(缓存密钥内容)下的 Headers(标头)中,选择 Whitelist(白名单)。从标头列表中,选择源所需的标头之一。然后,选择 Add header(添加标头)。对源所需的所有标头重复此步骤。
根据要将策略附加到的行为的要求,完成缓存策略的所有其他设置。
按照将缓存策略附加到 CloudFront 分配的相关行为的步骤操作。
要使用旧式缓存设置转发标头,请执行以下步骤:
-
从 CloudFront 控制台打开分配。
选择 Behaviors(行为)选项卡。
选择 Create Behavior(创建行为),或者选择现有行为,然后选择 Edit(编辑)。
对于 Cache and origin request settings(缓存和源请求设置),选择 Use legacy cache settings(使用旧缓存设置)。
对于 Cache Based on Selected Request Headers(基于选择的请求标头进行缓存),选择 Whitelist(白名单)。
在 Whitelist Headers(将标头列入白名单)下,从左侧菜单中选择您的源所需的标头。然后选择 Add(添加)。
选择 Yes, Edit(是,请修改)。
注意:同时确保将标头作为您的客户端请求的一部分转发到 CloudFront,然后由 CloudFront 转发到源。
CloudFront 分配的缓存行为允许 HTTP 请求的 OPTIONS 方法如果更新 CORS 策略并转发相应的标头后仍显示错误,请尝试在分配的缓存行为中允许 OPTIONS HTTP 方法。默认情况下,CloudFront 只允许 GET 和 HEAD 方法,但某些 Web 浏览器可能会发出 OPTIONS 方法的请求。
要在 CloudFront 分配中启用 OPTIONS 方法,请执行以下步骤:
-
从 CloudFront 控制台打开分配。
选择 Behaviors(行为)选项卡。
选择 Create Behavior(创建行为),或者选择现有行为,然后选择 Edit(编辑)。
对于 Allowed HTTP Methods(允许的 HTTP 方法),选择 GET, HEAD, OPTIONS(GET、HEAD、OPTIONS)。
选择 Yes, Edit(是,请修改)。
注意:CloudFront 通常在五分钟内将更改部署到您的分配。更改分配后,请考虑使缓存失效,否则,您仍可能会收到以前缓存的响应。