如何制作跨域XHR请求

时间:2011-08-16 13:55:16

标签: javascript xss xmlhttprequest same-origin-policy

如何制作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 标头相关联?

4 个答案:

答案 0 :(得分:3)

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

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

有关详细信息,请参阅https://developer.mozilla.org/en/HTTP_access_control

答案 1 :(得分:1)

使用JSONP或在您自己的域上拥有一项服务,在服务器端调用另一个域,并以此方式获取您所需的内容。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

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