jQuery Ajax笔记
- 由于浏览器安全限制,大多数Ajax请求受到同源策略的限制;请求无法成功地从不同的域、子域、端口或协议检索数据。
- 脚本和JSONP请求不受同源策略的限制。
有一些方法可以克服跨域障碍:
有一些插件可以帮助处理跨域请求:
注意!
克服这个问题的最好方法是在后端创建自己的代理,使您的代理指向其他域中的服务,因为在后端不存在同源策略限制。但如果您无法在后端执行此操作,则请注意以下提示。
使用第三方代理不是一个安全的做法,因为他们可以追踪您的数据,因此它可以与公共信息一起使用,但
绝不能与私人数据一起使用。
下面展示的代码示例使用
jQuery.get()和
jQuery.getJSON(),它们都是
jQuery.ajax()的简写方法。请注意,本文保留HTML标签。
CORS Anywhere
2021更新
公开演示服务器(cors-anywhere.herokuapp.com)将在2021年1月31日之前受到非常严格的限制
CORS Anywhere(cors-anywhere.herokuapp.com)的演示服务器旨在展示该项目。但是,由于滥用行为已经如此普遍,演示服务器所在平台(Heroku)已要求我关闭服务器,尽管我们已经努力对抗滥用行为。由于滥用和其流行度,宕机变得越来越频繁。
为了对抗这个问题,我将做出以下更改:
- 速率限制将从每小时200个减少到每小时50个。
- 在2021年1月31日之前,cors-anywhere.herokuapp.com将停止作为开放代理服务器。
- 从2021年2月1日开始,cors-anywhere.herokuapp.com仅在访问者完成挑战后才会提供服务:用户(开发人员)必须访问cors-anywhere.herokuapp.com上的页面,以暂时为其浏览器解锁演示。这使开发人员可以尝试功能,以帮助决定自主托管或寻找替代方案。
CORS Anywhere是一个node.js代理程序,它会在代理请求中添加CORS头信息。
要使用该API,请在URL前加上API 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;
}
});
$.get(
'http://en.wikipedia.org/wiki/Cross-origin_resource_sharing',
function (response) {
console.log("> ", response);
$("#viewer").html(response);
});
无论何源
无论何源是一种跨域jsonp访问方式。这是anyorigin.com的一个开源替代品。
要从google.com获取数据,您可以使用此片段:
$.ajaxSetup({
scriptCharset: "utf-8",
contentType: "application/json; charset=utf-8"
});
$.getJSON('http://whateverorigin.org/get?url=' +
encodeURIComponent('http://google.com') + '&callback=?',
function (data) {
console.log("> ", data);
$("#viewer").html(data.contents);
});
CORS代理
CORS代理是一个简单的node.js代理,可用于启用任何网站的CORS请求。
它允许您网站上的JavaScript代码访问其他域上的资源,否则将由于同源策略而被阻止。
它是如何工作的?
CORS代理利用了与HTML 5一起添加的跨源资源共享功能。服务器可以指定他们希望浏览器允许其他网站请求他们托管的资源。CORS代理只是一个HTTP代理,它在响应中添加一个标题,表明“任何人都可以请求此资源”。
这是另一种实现目标的方法(请参见
www.corsproxy.com)。你所要做的就是从被代理的URL中删除
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);
});
现在看起来 http://www.corsproxy.com/
域名是一个不安全/可疑的网站。不建议使用。
CORS代理浏览器
最近我发现了这个工具,它涉及各种安全导向的跨源远程共享实用程序。但它是一个带有Flash后端的黑盒子。
你可以在这里看到它的运行效果:CORS代理浏览器
在GitHub上获取源代码:koto/cors-proxy-browser