我认为,这里的内容远不止眼前所见,重要的是首先了解 CORS,然后尝试找出解决方案,因为人们在 CORS 讨论中引入了诸如 - Angular 等字眼。
假设您已经开发和部署了 API,打算从部署在某些固定 URL/域的特定 UI 代码中使用。作为服务器,CORS 是一种告诉客户端(如浏览器)的方式,即使我正在处理此请求,但我也告诉您此请求并非来自我作为服务器预期的 UI 域(by默认 - 它必须是相同的来源 )所以你采取必要的行动。当浏览器被服务器标记时,它会抑制服务器响应并显示请求失败。
以上确实是一个非常简单的描述,您应该了解更多关于同源安全政策。
另外,请注意,服务器通过设置有关它支持的来源的响应标头来标记客户端,但无论如何都会提供响应,因此到目前为止您应该了解两点,
- 与Angular无关,与浏览器有关
- 它是客户端的特权,如果服务器告诉它请求不是来自 origin / domain ,它是期待的。通常只有网络浏览器实现它,而不是由 curl 等客户端完成
说了这么多,您是否希望您的 API 托管在与 UI 域相同的域中? 如果不是,那么您需要更改服务器端代码以明确告知 CORS 标头,否则浏览器将继续失败。
解决方案,
1.为每个端点添加注释-org.springframework.web.bind.annotation.CrossOrigin。
2.向每个可部署单元添加全局配置,如图所示here。优点是这些工件可以进一步部署到不同的域。
不要只是盲目地复制 - 粘贴此行 config.addAllowedOrigin("*"); ,将其设置为您希望服务的特定域,否则没有这种安全性。
3. 编写另一个可部署的工件来处理您的安全信息,例如 CORS 等,这个工件将是接收所有传入请求并在构建来自这 30 个端点的响应后响应的前端。客户端不会直接与这 30 个端点交互,而只会与这个工件交互。显然,在与这 30 个端点相同的域上也需要此工件。
对 30 项服务进行更改不是一个可行的选择,除了
在服务方面进行更改,还有其他选择吗
可用吗?
我认为除了在服务器端更改代码之外没有其他解决方案。您团队之外的任何人都无法对您提出这些要求,因为部署模型是非常恰当的主题,并且会根据需要从组织到组织进行。
Origin 标头在请求中发送,由三部分组成:协议、主机和端口号。