1、什么是同源策略?
同源策略,即Same origin policy,它是所有支持JavaScript的浏览器都会使用的一种安全策略。
所谓同源,指的是同协议、同域名、同端口。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。
2、什么是跨域?跨域有几种实现形式?
- 由于同源策略的存在,我们的浏览器不能执行其他网站的脚本,这时候就需要用到跨域。
简言之,跨域就是在不同源的情况下,通过某一个域名的网页去请求另一个域名的资源。其中,只要协议、域名、端口中有任何一个是不同的,就被视为是跨域。 - 一般来说,跨域有包括JSONP、CORS、降域、postMessage等在内的四种实现形式。
3、JSONP 的原理是什么?
JSONP,即JSON Padding, 其原理是利用<script>标签中src属性的链接没有跨域限制的特性,达到与第三方通讯的目的。
当我们需要进行跨域通讯时,可以先创建一个<script>标签元素,地址指向第三方的API网址,并提供一个回调函数来接收数据。第三方产生的响应为JSON数据的包装,这样浏览器就会调用callback函数,并传递解析后的JSON对象作为参数。本站的脚本就可以在callback函数里处理所传入的数据了。
4、CORS是什么?
CORS的全称是跨域资源共享(Cross-Origin Resource Sharing),是一种 ajax 跨域请求资源的方式,支持现代浏览器,IE支持10以上。
当我们使用 XMLHttpRequest 发送请求时,浏览器如果发现该请求不符合同源策略,会给该请求加一个请求头:Origin;后台在经过一系列的处理后,如果确定接受该请求,则会在返回的结果中加入一个响应头:Access-Control-Allow-Origin。
浏览器会自动判断该响应头中是否包含 Origin 的值。如果包含,则浏览器会处理该响应,我们就可以拿到响应数据;如果不包含,浏览器会直接驳回,我们就无法拿到响应数据了。
所以 CORS 的表象会让你觉得它与同源的 ajax 请求没有任何区别,代码也完全一样。