【问题标题】:Is it possible to add headers for CORS at the calling side server?是否可以在调用端服务器上为 CORS 添加标头?
【发布时间】:2014-05-11 17:45:36
【问题描述】:

我有一个 GWT 应用程序,其中客户端向另一个域发出请求。 我在 GWT 中使用 RequestBuilder 编写了请求。

在执行代码时,我的浏览器出现错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

所以我用谷歌搜索,发现我发出请求的域应该在它发送的响应中添加这个标头。现在我无法控制其他域的服务器,所以我无法在那里进行任何修改。

我的问题是,在我将响应发送到我的客户端之前,我是否可以截获响应和 Access-Control-Allow-Origin 标头以响应其他域的服务器在我的服务器上发送的响应? 我尝试使用过滤器,但过滤器不会被来自另一个域的响应调用。

这可能吗,是我遗漏了什么还是不可能?

【问题讨论】:

    标签: java servlets gwt cors


    【解决方案1】:

    Vivek 关于浏览器不允许跨域请求的回答是正确的,除了CORS 机制,支持它的较新浏览器可以以跨源方式尝试也支持它的服务器。

    但是,除非远程服务器本身支持它,否则您无能为力。如果我从 A 提供我的应用程序,并想连接到 B,则只有 B 可以授权。如果允许 A 允许我的应用程序通过某些过滤器或 servlet 连接到 B,那么我可以编写一个调用 gmail 或 facebook 或 twitter 的应用程序,并在其他 url 上读取/写入您的设置和个人数据。

    因此,您正在联系的跨源服务器必须批准与您提到的标头的连接。取而代之的是,您仍然可以使用自己的服务器作为跨源服务器的代理。

    【讨论】:

    • 如果我可以让我的服务器作为代理并尝试授权 CORS 标头,以便我的浏览器确实将请求发送到其他域服务器,那么其他域服务器是否会发送我的数据要求?根据你的说法,我认为这是不可能的。然后我不明白为什么我们必须拥有自己的服务器作为代理。你能解释一下吗?
    • 如果您将服务器用作代理,则不需要 CORS。为了使 CORS 工作,JS 应用程序必须请求远程服务器允许 CORS,并且远程服务器必须批准它 - 您的服务器不参与该对话(并且不能参与,否则这将是攻击其他人的好方法网站)。这些基本上是两个选项:或者远程服务器可以处理 CORS或者您使用自己的服务器作为代理。
    • 好的,我现在明白了。我假设是我的服务器将请求发送到其他域服务器而不是 JS 应用程序。谢谢。
    【解决方案2】:

    根据同源安全策略,Web 浏览器禁止跨域请求。这些限制仅限于基于浏览器的应用程序,因此您绝对可以使用自己的服务器应用程序作为基于 GWT 的客户端应用程序和外部服务器之间的过滤器。

    【讨论】:

      猜你喜欢
      • 2016-02-15
      • 2019-04-10
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 2020-03-30
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多