【问题标题】:How to make cross domain XHR request如何进行跨域 XHR 请求
【发布时间】:2011-10-28 02:24:40
【问题描述】:

如何进行有效的 XHR 跨域请求 - 我尝试了“Script Tag Hack”,但它不起作用或者我做错了什么。有什么建议?

我想从 B 调用域 A 中的脚本。

域 A: [index.html]

<head>
<script type="text/javascript" src="https://evilDomain/xhrTest.js"></script>
</head>

域 B: [xhrTest.js]

$.ajax({
      url: "https://evilDomain/processRequest",
      success: function(result){
        alert(result);
      }
});

已编辑

我也尝试过以这种方式使用 JSONP:

$.ajax({
      url: "https://evilDomain/processRequest",
      dataType: "jsonp",
      success: function(result){
        alert(result);
      }
});

我正在使用 TOMCAT 容器,解决方案是否与 Access-Control-Allow-Origin 标头连接?

【问题讨论】:

    标签: javascript xss xmlhttprequest same-origin-policy


    【解决方案1】:

    是的,您可以将 Access-Control-Allow-Origin 标头添加到您的服务器响应中。这将允许您发出跨域请求。

    然后,您可以根据需要使用 Access-Control-Allow-MethodsAccess-Control-Allow-Headers 进一步自定义。

    更多详情见https://developer.mozilla.org/en/HTTP_access_control

    【讨论】:

    • 是的,但这对我来说不是很好的解决方案 - 它应该与大多数浏览器兼容(甚至是 ie6)
    • 那么 JSONP 是你唯一的选择。
    • 但我还需要做登录表单,所以我不能在 URL 中传递凭据
    【解决方案2】:

    域 B JS 被包含在页面中,然后从源自域 A 的页面执行,因此出现了问题。要执行此跨域,您需要将数据响应作为“脚本”本身请求,然后从那里解析它。

    【讨论】:

      【解决方案3】:

      通常,您会要求服务器为您执行请求。

      另一种选择是让其他人为你做这件事(例如雅虎的服务)。

      您的问题是 domain B 的代码仍然在 domain A 的上下文中执行。 因此,https://evilDomain/processRequest 仍然无法读取,因为代码作为 domain A 执行,即使它实际上来自 domain B

      【讨论】:

      • 是的,最清晰(没有黑客)的解决方案是使用对我有请求的服务器。感谢您的回答。
      【解决方案4】:

      使用 JSONP 或在您自己的域上使用服务调用服务器端的其他域并以这种方式获得所需的内容。

      【讨论】:

      • 我想过,但我正在创建登录表单。当我使用 JSONP 时,我必须在 URL 中传递所有参数
      • 为什么要在 url 中传递它们?做一个 POST,而不是一个 GET。
      • 正如维基百科所说 (en.wikipedia.org/wiki/JSONP) 你需要使用脚本标签导入脚本,所以它是 GET。你能用 POST 提出你的版本吗?
      • @smas - 我的错。该死的维基百科! ;)
      • @smas - 我认为在这种情况下,您需要对自己的服务器进行 POST 并通过您自己的服务进行所有身份验证和获取数据,该服务调用其他域的服务,因为这不明智使用 URL 中的登录信息通过 GET 进行登录。
      猜你喜欢
      • 2013-07-26
      • 1970-01-01
      • 2017-07-31
      • 2017-01-05
      • 2016-09-24
      • 2013-10-15
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      相关资源
      最近更新 更多