题目1: 什么是同源策略
同源策略:浏览器出于安全方面的考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。
本域指:同协议、同域名、同端口。
题目2: 什么是跨域?跨域有几种实现形式
跨域是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。
跨域的方法:
- JSONP
- CORS
- 降域
- postMeassge
题目3: JSONP 的原理是什么
jsonp跨域的原理:
在html页面上有三种资源是可以与页面本身不同源的。分别是:js脚本,css样式文件,图片,如下所示,所以它们是可以链接访问到不同源的资源的。
1)<script type="text/javascript" src="url" ></script>
2)<link type="text/css" rel="stylesheet" href="url" />
3)而jsonp就是利用了<script>标签可以链接到不同源的js脚本,来到达跨域目的。当链接的资源到达浏览器时,浏览器会根据他们的类型来采取不同的处理方式,比如,如果是css文件,则会进行对页面 repaint,如果是img 则会将图片渲染出来,如果是script 脚本,则会进行执行,比如我们在页面引入了jquery库,利用页面上 script 标签可以跨域,并且其 src 指定的js脚本到达浏览器会执行的特性,我们可以进行跨域取得JSON格式的数据。
例子:
<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-2.1.1.min.js"></script>
<meta charset="utf-8">
<title>JSONP</title>
</head>
<body>
<div class="ct">
<button id="btn">获取天气</button>
<ul>
<li class="city">城市</li>
<li class="date">日期</li>
<li class="weather">天气</li>
</ul>
</div>
</body>
<script>function getWeather(json) {
$('.city').text('城市:' + json.result.currentcity)
$('.date').text('日期:' + json.date)
$('.weather').text('天气:' + json.result.weather)
}
$('#btn').on('click', function () {
var script = document.createElement('script');
script.src = 'http://api.jirengu.com/weather.php?callback=getWeather';
document.body.appendChild(script);
document.body.removeChild(script)
})
</script>
</html>
题目4: CORS是什么
CORS 全称是跨域资源共享(Cross-Origin Resource Sharing),是一种 ajax 跨域请求资源的方式。
在XMLHttpRequset的请求头Header中加入Access-Control-Allow-Origin:目标域名的方式使浏览器进行跨域资源共享。