如何使跨域请求
如您所知,Web浏览器的安全性不允许进行跨域请求。 我读了一本书,说只有在可以将文件放在服务器上时(意味着将您加载到同一个请求的域的页面),才应该使用XMLHTTPRequest。 如果你不能 – 你应该寻找替代品。
我的问题是 :
- 什么是XMLHTTPRequest的跨域替代?
- 怎么样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); }
检查以下更多信息
使用jQuery创build跨域ajax JSONP请求
如果你愿意传输一些数据,你不需要保护(任何公共的信息),你可以使用CORS代理,这很容易,你不需要改变你的代码或服务器端的任何东西(特别是它不是像雅虎API或OpenWeather那样的服务器)。 我用它来获取XMLHttpRequest的JSON文件,它工作正常。