jQuery的阿贾克斯注
- 由于浏览器的安全限制,大多数阿贾克斯请求都受到了same origin policy;该请求无法成功从不同的域,子域,端口或协议中检索数据。
- 脚本和JSONP请求不受相同的源策略限制。
有克服跨域屏障的一些方法:
有一些插件,与跨帮助 - 域个请求:
注意!
克服这个问题的最好办法,就是通过在后台建立自己的代理,让代理将指向其他领域的服务,因为在后端不存在相同的起源政策限制。但是如果你不能在后端做到这一点,那么请注意以下提示。
警告!
使用第三方代理不是一个安全的做法,因为他们可以跟踪你的数据,所以它可以用公共信息中使用,但从来没有与私人数据。
下面使用所示的代码示例jQuery.get()和jQuery.getJSON(),两者都是的jQuery.ajax()
速记方法
CORS Anywhere的
CORS Anywhere是一个node.js代理它将CORS头添加到代理请求。
要使用API,只需在URL前加上URL即可。 (支持HTTPS:看github repository)
如果你想自动启用跨域请求需要的时候,可以使用下面的代码片段:
$.ajaxPrefilter(function (options) {
if (options.crossDomain && jQuery.support.cors) {
var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
options.url = http + '//cors-anywhere.herokuapp.com/' + options.url;
//options.url = "http://cors.corsproxy.io/url=" + options.url;
}
});
$.get(
'http://en.wikipedia.org/wiki/Cross-origin_resource_sharing',
function (response) {
console.log("> ", response);
$("#viewer").html(response);
});
无论产地
Whatever Origin是一个跨域jsonp访问。这是anyorigin.com的开源替代品。
从google.com,取数据,你可以使用这个片段:
// It is good specify the charset you expect.
// You can use the charset you want instead of utf-8.
// See details for scriptCharset and contentType options:
// http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings
$.ajaxSetup({
scriptCharset: "utf-8", //or "ISO-8859-1"
contentType: "application/json; charset=utf-8"
});
$.getJSON('http://whateverorigin.org/get?url=' +
encodeURIComponent('http://google.com') + '&callback=?',
function (data) {
console.log("> ", data);
//If the expected response is text/plain
$("#viewer").html(data.contents);
//If the expected response is JSON
//var response = $.parseJSON(data.contents);
});
CORS代理
CORS代理是一个简单的的node.js代理为任何网站启用CORS请求。 它允许您网站上的JavaScript代码访问其他域上的资源,这些资源通常会因同源策略而被阻止。
它是如何工作的? CORS代理利用跨源资源共享,这是一项与HTML 5一起添加的功能。服务器可以指定他们希望浏览器允许其他网站请求他们托管的资源。 CORS Proxy只是一个HTTP代理服务器,它在响应中添加一个标题,标明“任何人都可以请求这个”。
这是实现此目标的另一种方式(请参见www.corsproxy.com)。所有你需要做的是剥离http://和www。从URL被代理,并与www.corsproxy.com/
$.get(
'http://www.corsproxy.com/' +
'en.wikipedia.org/wiki/Cross-origin_resource_sharing',
function (response) {
console.log("> ", response);
$("#viewer").html(response);
});
CORS代理浏览器预先设置URL
最近我发现这一个,它涉及到各种安全导向的跨源远程共享工具。但它是一个以Flash作为后端的黑盒子。
你可以看到它在这里的行动:CORS proxy browser
获取GitHub上的源代码:koto/cors-proxy-browser
您也可以从这里部署您自己的WhateverOrigin.org版本(或自行使用的代码):https://github.com/ripper234/Whatever-Origin/ – EpicVoyage 2013-11-17 14:18:33
我已经试过这段代码,它工作正常从跨域加载HTML,但请求的HTML包含未加载响应的图像。意味着返回的跨域请求的HTML不包含图像。有没有什么办法来加载图像也????? – Hitesh 2014-01-21 11:39:10
图像,CSS和外部JavaScript可以从另一个来源引用,因此,在响应中,您可以通过HTML字符串并替换外部资源的src – jherax 2014-01-21 17:00:19