同源策略
1995 年由 Netscape
公司提出,之后被其他浏览器厂商采纳。同源策略只是一个规范,并没有指定其具体的使用范围和实现方式,各个浏览器厂商都针对同源策略做了自己的实现。一些 web 技术都默认采取了同源策略,这些技术范围包括但不限于Silverlight
, Adobe Flash
, Adobe Acrobat
, Dom
, XMLHttpRequest
。
为了保证使用者信息的安全,防止恶意网站篡改用户数据--------假设没有同源策略,那么我在A网站下的cookie
就可以被任何一个网站拿到;那么这个网站的所有者,就可以使用我的cookie
(也就是我的身份)在A网站下进行操作-------同源策略可以算是 web 前端安全的基石,如果缺少同源策略,浏览器也就没有了安全性可言。
非同源的网站之间
- 无法共享 cookie, localStorage, indexDB
- 无法操作彼此的 dom 元素
- 无法发送 ajax 请求
- 无法通过 flash 发送 http 请求
- 其他
跨域
同源策略做了很严格的限制,但是在实际中,又确实地方需要突破同源策略的限制,也就是我们常说的跨域
同源策略最早被提出的时候,为的就是防止不同域名的网页之间共享 cookie,但是如果两个网页的一级域名是相同的,可以通过设置 document.domain
来共享 cookie。
study.cn/json/jsonp/jsonp.html | ||
请求地址 | 形式 | 结果 |
http://study.cn/test/a.html | 同一域名,不同文件夹 | 成功 |
http://study.cn/json/jsonp/jsonp.html | 同一域名,统一文件夹 | 成功 |
http://a.study.cn/json/jsonp/jsonp.html | 不同域名,文件路径相同 | 失败 |
http://study.cn:8080/json/jsonp/jsonp.html | 同一域名,不同端口 | 失败 |
https://study.cn/json/jsonp/jsonp.html | 同一域名,不同协议 | 失败 |
jsonp的产生:
1.AJAX直接请求普通文件存在跨域无权限访问的问题,不管是静态页面也好.
2.不过我们在调用js文件的时候又不受跨域影响,比如引入jquery框架的,或者是调用相片的时候
3.凡是拥有scr这个属性的标签都可以跨域例如<script><img><iframe>
4.如果想通过纯web端跨域访问数据只有一种可能,那就是把远程服务器上的数据装进js格式的文件里.
5.而json又是一个轻量级的数据格式,还被js原生支持
6.为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback 参数给服务端,
前端平时开发的过程中,解决跨域问题的集中方案请移步-------https://blog.csdn.net/chjj0904/article/details/78752792