如何进行跨域请求
How to make cross domain request
正如您所知,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
标头进行响应,该标头将允许或拒绝请求。浏览器需要检查此标头,如果允许,则将继续请求过程。如果没有,浏览器将取消请求。
您可以在此处找到更多信息和工作示例: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文件,它运行得很好。
- 在我的情况下,如何进行http请求
- http请求使用html而不是json进行响应
- 如何设置$.ajax请求的超时,并在超时时间过长时进行重做
- 如何在服务器仍在处理以前的请求时对ajax请求进行排队
- jQuery对请求图像的外部文本进行查询
- fetch(),如何进行非缓存请求
- 如何使用javascript进行post请求
- jquery对话框内容仅针对第一个请求进行对齐
- 终止所有正在进行的XHR请求
- 如何在将输入发送到 XMLHTTP 请求之前对其进行筛选
- Node.js:无法使用请求模块进行PROFIND
- 在使用量角器进行e2e测试时记录xhr请求
- 如何使用Laravel进行动态Ajax请求
- 如何使用nock和请求库进行ETIMEDOUT
- 如何模拟具有绝对路径的请求以进行JS测试
- 使用 NodeJS 的请求模块进行 HTTP 身份验证,返回未定义的正文
- 无法使用节点请求模块进行基本的 HTTP 身份验证
- 在DELETE请求后进行res.redirect
- 无法加载资源:服务器以状态 421(错误请求)进行响应
- 当旧的ajax请求正在进行时,阻止新的ajax请求