在我的react-redux应用程序中,我通过Axios向后端服务API提出服务请求,在这里我很好,因为我完全控制了我的后端服务,因此我添加了" <strong">访问控制: *"我服务的每个响应中的标题"。请注意,我的客户端和服务器托管在不同的服务器域中。
但问题是,有一项服务将重定向到另一个XYZ服务,位于我没有任何控制的另一个域中。现在,XYZ服务将在某些验证(登录会话)上重定向到我的服务器,而我的服务器最终将响应发送给我的基于React的客户端。
在这里,我正面临CORS错误,而重定向XYZ服务则位于此XYZ服务未发送标题" access-control-allow-allow-Origin: *"的另一个域中。
如何解决此问题而不会在服务器端更改。我可以如https://developer.mozilla.org/en-us/docs/web/http/access_control_cors中提到的"简单请求"。我已经尝试过这种方式,但它不起作用。
请帮助我。谢谢。
本质上,此错误消息意味着您的客户端检测到了一种安全问题。它想警告您,即使网页正在从服务器A获取数据,实际上该网站不是在服务器A上托管的,而是在服务器B上托管的。
为了解决此问题,您应该查看WebServer A(托管您的REST服务的一个)。那就是您需要添加一些东西的地方。服务器实际上应该发送一种响应,以告知您的客户情况。
实际上是您的后端托管其休息服务,必须发送特定的标头以支持CORS。
您的客户实际上将访问您的服务器2次。
-
首先,它将制作一个" preflight" 来检查Web服务具有哪些属性。该前应发送带有一堆HTTP标头的响应。其中一个标题通知客户端允许的原始(客户端可以运行的允许服务器)。该起源列表可以是通配符(即
*
)或特定主机名列表。这告诉您的客户不必担心这个问题。 -
然后,客户端建立第二个连接以实际执行您的服务。
很难为您提供更多信息,因为它取决于您正在使用的Web服务器类型:
- 例如。如果您具有带有嵌入式码头服务器的Java后端(可能也适用于其他Web服务器),则可以在这些情况下定义过滤器,并在这些情况下发送正确的标头。(
CrossOriginFilter
)。