如何进行跨域请求

时间:2013-07-26 06:50:58

标签: javascript websocket xmlhttprequest cross-domain

如您所知,Web浏览器的安全性不允许发出跨域请求。我读了一本书,说只有在你可以将文件放在服务器上时才应该使用XMLHTTPRequest(意味着你要将页面加载到同一个请求的域中)。如果你不能 - 你应该寻找替代方案。

我的问题是

  1. XMLHTTPRequest的跨域替代方法是什么?
  2. WebSockets 怎么样?此技术是否允许跨域请求?
  3. 修改 我还不清楚......

    例如,我从 www.domain1.com 中提取页面,我需要从 www.domain2.com 请求javascript。所以拉出的页面应该包括:

    <script src="www.domain2.com/script.js"></script>
    

    避免跨域限制。

    我可以使用JSONP,请求看起来像: http://ww.domain1.com/?callback=someFunction.js

    但是:不一样吗?我只是从另一个域中拉js!它是否避免跨域限制?

3 个答案:

答案 0 :(得分:20)

您可以使用XMLHttpRequest对象发出跨域请求。这是使用称为“跨源资源共享”的东西完成的。看到: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

非常简单地说,当向服务器发出请求时,服务器可以使用Access-Control-Allow-Origin标头进行响应,该标头将允许或拒绝该请求。浏览器需要检查此标头,如果允许,则它将继续请求过程。如果不是,浏览器将取消请求。

您可以在此处找到更多信息和工作示例: http://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or-xdomainrequest.html

JSONP是一种替代解决方案,但您可能会认为这有点像黑客攻击。

答案 1 :(得分:5)

进行跨域AJAX调用

您的网络服务必须支持方法注入才能执行JSONP。

您的代码似乎很好,如果您的Web服务和您的Web应用程序托管在同一个域中,它应该可以正常工作。

使用dataType执行$ .ajax:'jsonp'意味着jQuery实际上是在查询URL中添加新参数。

例如,如果您的网址为http://10.211.2.219:8080/SampleWebService/sample.do,则jQuery会添加?callback = {some_random_dynamically_generated_method}。

这种方法实际上是附加在窗口对象中的一种代理。这没什么特别的,但看起来像这样:

window.some_random_dynamically_generated_method = function(actualJsonpData) {
    //here actually has reference to the success function mentioned with $.ajax
    //so it just calls the success method like this: 
    successCallback(actualJsonData);
}

检查以下内容以获取更多信息

Make cross-domain ajax JSONP request with jQuery

答案 2 :(得分:4)

如果您愿意传输某些数据并且您不需要保护(任何公共信息),您可以使用CORS代理,这非常简单,您无需更改代码中的任何内容或在服务器端(特别是它不是你的服务器,如Yahoo API或OpenWeather)。 我用它来获取带有XMLHttpRequest的JSON文件,它运行正常。