Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CORS原点设置不正确? 我有一个JavaScript应用程序,假设它部署在portal.example.com上 它包括一个标记,用于加载从assets.example.com提供服务的源代码 该JavaScript文件向admin.example.com_Javascript_Cors_Browser Security - Fatal编程技术网

CORS原点设置不正确? 我有一个JavaScript应用程序,假设它部署在portal.example.com上 它包括一个标记,用于加载从assets.example.com提供服务的源代码 该JavaScript文件向admin.example.com

CORS原点设置不正确? 我有一个JavaScript应用程序,假设它部署在portal.example.com上 它包括一个标记,用于加载从assets.example.com提供服务的源代码 该JavaScript文件向admin.example.com,javascript,cors,browser-security,Javascript,Cors,Browser Security,由于CORS飞行前失败,此API请求出错 Failed to load http://admin.example.com/v0/user/navigation: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://portal.example.com' is therefore not allowed access. 实际的选项请求如下 OPTIONS /v0/

由于CORS飞行前失败,此API请求出错

Failed to load http://admin.example.com/v0/user/navigation: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://portal.example.com' is therefore not allowed access.
实际的
选项
请求如下

OPTIONS /v0/user/navigation HTTP/1.1
Host: admin.example.com
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://portal.example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
Access-Control-Request-Headers: authorization,x-correlation-id,x-user-domain
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,en-GB;q=0.8
HTTP/1.1 200
Allow: GET
Access-Control-Allow-Headers: authorization,x-correlation-id,x-user-domain
Access-Control-Allow-Methods: GET
Access-Control-Allow-Origin: http://portal.example.com
Vary: Origin
Content-Length: 0
Date: Tue, 20 Feb 2018 12:12:19 GMT
Set-Cookie: 97d2c19dadc3933a73dce9bec0748df1=5a15895c5e0f5b526c177132cb4aa666; path=/; HttpOnly
Cache-control: private
X-RBT-SCAR: 10.127.48.7:777511903:1000
实际的
选项
响应如下

OPTIONS /v0/user/navigation HTTP/1.1
Host: admin.example.com
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://portal.example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
Access-Control-Request-Headers: authorization,x-correlation-id,x-user-domain
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,en-GB;q=0.8
HTTP/1.1 200
Allow: GET
Access-Control-Allow-Headers: authorization,x-correlation-id,x-user-domain
Access-Control-Allow-Methods: GET
Access-Control-Allow-Origin: http://portal.example.com
Vary: Origin
Content-Length: 0
Date: Tue, 20 Feb 2018 12:12:19 GMT
Set-Cookie: 97d2c19dadc3933a73dce9bec0748df1=5a15895c5e0f5b526c177132cb4aa666; path=/; HttpOnly
Cache-control: private
X-RBT-SCAR: 10.127.48.7:777511903:1000
我认为问题在于请求实际上来自
assets提供的脚本。example.com
正在发出请求。所以我应该返回
Access Control Allow Origin:http://assets.example.com
选项中的
响应。然而,我听从了他的建议

Access Control Allow Origin标头通过在响应中返回源请求标头“*”或“null”的值来指示是否可以基于共享资源

那么,我是误解了CORS,还是浏览器发送的是主执行URL的
来源
,而不是发出请求的脚本的URL

已更新

得到回应

HTTP/1.1 200
X-Correlation-Id: 8978b245-081a-4c4a-b4c9-73f2920ab55c
Content-Type: application/vnd.example+json
Transfer-Encoding: chunked
Date: Tue, 20 Feb 2018 13:22:39 GMT
Set-Cookie: 97d2c19dadc3933a73dce9bec0748df1=dc4e3543c3071d752959e7176c5e4d29; path=/; HttpOnly
Cache-control: private
X-RBT-SCAR: 10.127.48.7:778160108:2000

请求的资源上不存在“访问控制允许来源”标题。
这意味着“Access Control Allow Origin”标头丢失,而不是不允许您的域

如果你没有得到许可,你会看到

Access Control Allow Origin(访问控制允许原点)标题有一个值'http://www.example.com'这不等于提供的来源。

因此,要解决您的问题,您需要配置
GET
响应,以提供必要的CORS头以及
选项
响应


在您编辑的问题中,
GET
响应标题没有为
Access Control-*
提供任何内容,因此您会出现错误

您的CORS飞行前失败-您将收到200个响应和所有必需的CORS响应标题

但是,在GET响应中没有返回任何CORS响应头-,这就是失败的地方。至少,您需要返回一个与选项响应中返回的标题匹配的
访问控制允许来源
响应标题

因此,只要在GET响应中包含这一点,您就会很好:

Access-Control-Allow-Origin: http://portal.example.com

最后,浏览器添加了
Origin
请求头,相信我,这是正确的。但是发送什么值并不重要,因为所需的只是
访问控制允许源站
响应头匹配源站请求头(通过具有'*'值或与源站值完全匹配).

您能提供
GET
响应的标题吗?您的设置看起来是正确的。我将要提出的建议将是一个延伸。在设置CORS的服务器端,首先确保源代码的拼写正确。如果是,则取
http://portal.example.com
并删除整个字符串(及其前后的第一个字符),然后手动重新键入。我见过一些例子,人们复制和粘贴一些文本,其中包含一些未被发现的特殊unicode字符,造成了一些破坏。@alex rokabilis我已经更新了这个问题