最近接触到关于ajax的跨域问题,做个简单小结。
- 首先了解一下什么是跨域?
跨域就是从一个域名的网页去请求另一个域名的资源。举个例子,当前所在网页的网址是 http://localhost:8080/web/w.html ,想跑去请求 http://www.baidu.com 的资源,明显看出这两个网址的域名不同,端口不同,这波操作就是跨域。然而浏览器是存在同源策略这个机制的,就算强行这波操作最后只能say sorry。好啦,这里又牵扯到一个同源策略,这个同源策略呢是浏览器为安全性考虑而实施的重要策略,禁止执行与自身来源不同的域的任何脚本。但是,请看小标题,同源问题是针对ajax的,HTML本身没有跨域问题,拥有src属性的标签都拥有跨域的能力,比如<script>,<img>。
- 解决ajax跨域问题
这里以商城项目为例,前台工程通过ajax发送请求到后台工程,想向后台获取数据,这时就遇到了ajax跨域问题,这个时候,不要慌,去百度,我也是借鉴大神们的解决方案。
方法一:直接访问本工程的controller,再去controller中调用接口返回数据。(依据情况实现)
方法二:从HTML5下手,通过进行配置,屏蔽掉同源策略,比如添加允许跨域的响应头等,详情请参考百度。
方法三:jsonp,是一种可以绕过浏览器的安全限制,从不同的域请求数据的方法
- jsonp
web页面调用js文件是不在跨域范围内,回想一下,我们在使用插件时,是不是都要先引入相应的js。因此,要想跨域访问数据,必须想方设法把数据装进js格式文件里。
<script src="请求的url"></script>
JSON的纯字符数据格式可以简洁的描述复杂数据,被js原生支持,所以在web客户端通过与调用脚本一模一样的方式,来调用跨域服务器上动态生成的js格式文件(一般以JSON为后缀),显而易见,服务器之所以要动态生成JSON文件,目的就在于把客户端需要的数据装入进去。为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP。
该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。
(来源:点击打开链接)
jsonp正是利用这一漏洞达到跨域访问数据
$(function(){
$.ajax({
url:"请求的URL",
type:"GET",
dataType:"jsonp"
});
});
function callback(data){
alert(data);
}
小编只是知识点搬运工,不足之处请谅解。