gwt - 反向代理背后的 SOP 问题

标签 gwt reverse-proxy same-origin-policy

过去 5 个月我一直在开发 gwt 应用程序,现在是第三方人员开始使用它的时候了。为了准备这个,他们中的一个在反向代理后面设置了我的应用程序,这立即导致浏览器的同源策略出现问题。我猜响应 header 中有问题,但我似乎无法以任何方式重写它们以使问题消失。这个我试过了

response.setHeader("Server", request.getRemoteAddress());

以某种天真的尝试模仿我想要的行为。没有用(出乎所有人的意料)。

任何对此有所了解的人在阅读本文时很可能会窃笑并摇头,我不怪他们。我也会偷笑,要是我……我对此一窍不通,这自然就让这个问题变得非常难解了。任何帮助都将不胜感激。

我怎样才能让 header 重写工作并摆脱我正在处理的 SOP 问题?

编辑:我遇到的确切问题是弹出窗口说:

"SmartClient can't directly contact URL 'https://localhost/app/resource?action='doStuffs'" due to browser same-origin policy. Remove the host and port number (even if localhost) to avoid this problem, or use XJSONDataSource protocol (which allows cross-site calls), or use the server-side HttpProxy included with SmartClient Server."

但我不应该需要 smartclient HttpProxy,因为我在服务器之上有一个代理,不是吗?我没有得到任何迹象表明这可能是一个序列化问题,但也许这条消息隐藏了真正的问题......

解决方案 chris_l 和 saret 都帮助找到了解决方案,但由于我只能标记一个,所以我标记了 chris_l 的答案。鼓励读者将它们都提升起来,它们真的对我来说很重要。解决方案非常简单,只需删除您服务器的任何绝对路径并仅使用相对路径,这对我有用。谢谢大家!

最佳答案

SOP (对于 AJAX 请求)适用于 HTML 页面的 URL 和 AJAX 请求的 URL 的“来源”不同的情况。来源包括主机、端口和协议(protocol)。

所以如果页面是http://www.example.com/index.html,你的AJAX请求也必须指向http://www.example.com下的东西。对于 SOP,没关系,如果有反向代理 - 只要确保 URL - 在浏览器中显示(包括端口和协议(protocol)) - 没有不同。您在内部使用的 URL 无关紧要 - 但不要在您的 GWT 应用程序中使用该内部 URL!

注意: SmartClient 特殊情况下的解决方案原来是使用相对 URL(而不是相同来源的绝对 URL)。由于相对 URL 不是浏览器中的 SOP 要求,我认为这是 SmartClient 中的错误。

关于gwt - 反向代理背后的 SOP 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3502900/

相关文章:

ASP.net 同源策略 header 不起作用

google-app-engine - 尝试以下发现的实现 : 后,没有可用于 "transactions-optional"的持久性提供程序

caching - 为什么 nginx 不缓存我的内容?

load-balancing - HAProxy + Keycloak 重定向问题

apache - Laravel在反向代理后面路由

javascript - 如何防止 iFrame 中的 JavaScript 访问外部站点的属性,即使 iFrame 的内容来自同一来源?

javascript - 通过 Chrome 扩展避免跨源策略

java - 需要在GWT中运行Java代码

java - GWT Java - 设置字体样式

java - GWT 2.7.0、Eclipse Luna、Tomcat7、Jetty : NoClassDefFoundError: org/apache/juli/logging/LogFactory. WEB-INF/lib 目录中应该包含哪些内容?