错误 - 预检请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头

Posted

技术标签:

【中文标题】错误 - 预检请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头【英文标题】:Error- Preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource 【发布时间】:2019-02-24 17:38:54 【问题描述】:

我正在尝试从 Angular 应用程序调用安全的休息 API。这个 REST API 在 WAS 上运行,它正在验证 JWT 令牌。在谷歌浏览器中运行应用程序时,出现以下错误:

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。原点'http://localhost:4200' 因此不允许访问。

相同的调用在 IE 和 postman 中运行良好。你能帮帮我吗?

【问题讨论】:

【参考方案1】:

您的服务器需要在其响应中指定正确的 CORS 标头。

见https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

见https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers

只有浏览器强制执行 CORS,这就是它在 POSTMAN 中有效的原因,不确定为什么它在 IE 中有效

另见Why does my javascript get a "No 'Access-Control-Allow-Origin' header is present on the requested resource" error when Postman does not?

如果每次有人问这个问题我都有一磅。

【讨论】:

这是因为 Chrome 在您指定的请求之前发送了 OPTIONS 请求。需要将服务器配置为允许该方法的 CORS。 我的 Rest API 在 IBM WebSphere 8.0.4 上运行你能分享在上面配置 CORS 的步骤吗? 将这些标头添加到所有响应中... Access-Control-Allow-Origin: * Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT - 注意这允许任何客户端来自它的请求 - 您可能希望对其进行更多限制,但这应该可以帮助您入门 - 我以前从未使用过 IBM,因此无法提供有关如何配置它的详细信息 好的,我在包装器中有数百个 API。有什么方便的方法可以解决这个问题吗?有谁可以告诉我如何在 websphere 服务器上配置 CORS? 针对该问题专门提出一个新问题

以上是关于错误 - 预检请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章

预检请求未通过访问控制检查:

请求的资源上不存在“Access-Control-Allow-Origin”标头。或 对预检请求的响应未通过访问控制检查

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

在禁用 Web 安全模式下运行的 chrome 中,对预检请求的响应未通过访问控制检查

AWS - 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头

.NET 5 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头