如何进行跨域请求



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

我的问题是

  1. XMLHTTPRequest的跨域替代方案是什么
  2. WebSockets 怎么样?这项技术允许跨域请求吗

编辑:我还不清楚…

例如,我从www.domain1.com.中提取页面,并且需要从www.domain2.com.中请求javascript。因此,提取的页面应该包括以下内容:

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

以避免跨域限制。

我可以使用JSONP,请求将如下所示:http://ww.domain1.com/?callback=someFunction.js

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

您可以使用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是一个替代解决方案,但你可能会说它有点像黑客。

执行跨域AJAX调用

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

您的代码看起来很好,如果您的web服务和web应用程序托管在同一域中,它应该可以工作。

当您使用dataType:'jsonp'执行$.ajax时,这意味着jQuery实际上是在向查询URL添加一个新参数。

例如,如果您的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);
}

查看以下内容了解更多信息

使用jQuery 进行跨域ajax JSONP请求

如果你愿意传输一些数据,并且你不需要安全(任何公共信息),你可以使用CORS代理,这很容易,你不需要更改代码或服务器端的任何内容(尤其是它不是你的服务器,如Yahoo API或OpenWeather)。我用它来获取带有XMLHttpRequest的JSON文件,它运行得很好。

相关内容

  • 没有找到相关文章

最新更新