如何使跨域请求

如您所知,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头来响应,该头将允许或拒绝该请求。 浏览器需要检查这个头,如果允许的话,它将继续请求过程。 如果不是,浏览器将取消请求。

你可以在这里find更多的信息和工作示例: http : //www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or-xdomainrequest.html

JSONP是一个替代解决scheme,但你可能会认为这是一个黑客。

做一个跨域的AJAX调用

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

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

当你用dataType做一个$ .ajax:'jsonp'意味着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); } 

检查以下更多信息

http://json-p.org/

使用jQuery创build跨域ajax JSONP请求

如果你愿意传输一些数据,你不需要保护(任何公共的信息),你可以使用CORS代理,这很容易,你不需要改变你的代码或服务器端的任何东西(特别是它不是像雅虎API或OpenWeather那样的服务器)。 我用它来获取XMLHttpRequest的JSON文件,它工作正常。