什么是同源策略
浏览器出于安全考虑,只允许与本域的接口交互访问,
不同源的客户端脚本在没有明确授权的情况下, 不能读写对方的资源
同源是指:js脚本只能访问或者请求相同协议,相同域名,相同端口的页面。
同源(本域)必须满足3个条件:
1 相同协议
比如: 都是 http或者https
2 相同域名
比如: http://baidu.com/wenku.html 与 http://baidu.com/eee.php
3 相同端口 , 默认为80端口
比如: http://localhost:8080/aaa.html http://localhost:8080/bbb.htnl
什么是跨域?跨域有几种实现形式
就是在不同的域之间进行访问和数据传输,当前浏览器的页面的URL与请求的的URL不是一个域,调用不同域的接口
四种跨域方式:
- jsonp
- CORS
- 降域
- postMessage
***跨域问题其实就是浏览器的机制问题,也考虑到了安全性。
JSONP 的原理是什么
先说一下为什么要用script标签实现跨域。
因为在页面上有三种资源是可以与页面本身不同源的。
所以它们是可以链接访问到不同源的资源的。访问不同源就是跨域。
它们是:js脚本,css样式文件,图片。
跨域的前提条件是 服务器愿意提供这么一个接口供使用’
自己必须在前台事先创建一个包裹服务器传过来的数据的函数
而jsonp就是利用了<script>标签可以链接到不同源的js脚本,来到达跨域目的。
利用 页面上 script 标签可以跨域,并且其 src 指定的js脚本到达浏览器会执行的特性,我们可以进行跨域取得数据。
js脚本向服务器请求数据,服务器把早已指定声明存放数据的函数中存放数据,然后返回
jsop缺点:
但是只能在get 请求,
也不像ajax那样直接的获取数据
可能受到入侵,如果服务器给了一个假数据或者是一个危险的js,作为js执行,可能有获取cookie或者其他重要信息的危险
CORS是什么
跨域资源共享,是通过ajax跨域请求资源的方式,支持现代浏览器和IE10以上
怎么实现跨域呢?
只要看访问的地址是不是符合服务器的要求,在服务器端加入一个响应头,Access-Control-Allow-Origin,当浏览器查看返回的响应头包含origin时,浏览器处理响应,可以拿到响应数据。