gpt4 book ai didi

java - CORS 和 Spring MVC 服务 - 如何设置跨源主机?

转载 作者:行者123 更新时间:2023-12-02 11:38:17 24 4
gpt4 key购买 nike

前言

考虑我在本地运行的这两个网络应用程序:

  • 前端 Web 应用程序 localhost:8080
  • 服务 Web 应用 localhost:2020

在我本地的开发环境(工作)

当我访问我的前端 Web 应用程序时,我会在后台执行 JavaScript。此 JavaScript 正在向我的 Service Webapp 发出 XHR 请求。这些调用被SOP(同源策略)阻止。因为我的前端 Web 应用尝试调用另一个源上的服务(在本例中为端口 2020)。

为了使用 CORS(跨源资源共享),我允许我的前端 Web 应用程序使用 Spring 的 @CrossOrigin (Documentation) 访问我的服务 Web 应用程序的资源。注释。

  @CrossOrigin(Resources.Origins.FRONTEND) // http://localhost:8080
@GetMapping(Resources.Services.APIs.History.STREAM)
public SseEmitter subscribeToHistoryEvent() {
// logic
}

完成此设置后,我成功地将 XHR 请求从我的前端 Web 应用程序发送到我的服务 Web 应用程序。

在我的虚拟机部署环境上(不工作)

然后,我尝试将应用程序部署到虚拟机,以从远程角度进行测试。

现在可以通过这些 URL 访问网络应用

  • 我的机器的 IP 192.50.3.100
  • 前端网络应用 192.20.1.77:8080
  • 服务网络应用 192.20.1.77:2020

我能够访问我的前端 Web 应用但是由于 SOP,无法再次向我的服务 Web 应用发出 XHR 请求。

我认为这是因为我现在从我的机器 192.50.3.100 向服务 Web 应用程序发出 XHR 请求,该请求实际上只允许 http://localhost:8080 > 访问其资源。

我的结论

我认为我误解了这里应该使用 CORS 的方式。我不应该通过 JavaScript 触发 XHR 请求,因此从我的 BrowserClient 到任何跨源服务,但我应该调用我的前端 Web 应用程序并让它执行请求到位于另一个来源的另一个服务?

请告诉我使用 CORS 跳过 SOP 的正确方法是什么!

最佳答案

当您尝试从前端访问 http://localhost:8080 时,它会访问执行 JS 的计算机的 localhost(实际上是浏览器启动的位置)。

JS 应该调用后端的真实 IP - 192.20.1.77:2020 而不是 localhost:2020。

关于java - CORS 和 Spring MVC 服务 - 如何设置跨源主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48764659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com