同源策略与跨域请求
Origin - 源
location.origin
git remote add origin
目录
- 同源策略
- URL
- 什么不是同源策略
- 什么是同源策略
- 作用是什么
- 跨域
URL
Uniform Resource Locator,统一资源定位符,俗称网址
《图解HTTP》中的图
什么是同源策略
什么是源
JS: location.origin (IE下不支持)
什么是同源策略
Same-origin policy
浏览器的一个功能——同源策略(Same-Origin Policy)
同源是指域名、协议、端口相同。
不同源的客户端脚本在没明确授权的情况下,不能读写对方的资源。
什么不是同源策略
a.com/index.html
可以引用 b.com/main.js
可以引用 b.com/style.css
可以引用 b.com/logo.png
但是,a.com 里面的
b.com/main.js 不能对 b.com 的资源进行读写(ajax 报错)
实践:在本地搭建服务器进行验证
跨域
突破同源策略的限制
- 降域
- JSONP
- Cross-Origin Resource Sharing
-
HTML5 postMessage
- 其他 Hack
- 利用 hash
- 利用 window.name
降域
不同源 -> 同源
- child1.a.com 与 a.com
- child1.a.com 与 child2.a.com
- child1.a.com 与 xxx.child2.a.com
top 和 iframe 都要写:document.domain = a.com
JSONP
JSONP 与 JSON 没有什么关系
- a.com 可以引用 b.com 的 JS 文件
- 我们是不是可以在 b.com 的 JS 文件里面放数据
var script = document.createElement('script')
script.src = 'b.com/data.js'
//script.src = 'b.com/data.js?callback=xxx'
实践:自己实现一个 JSONP 的 server 和 client
JSONP 的问题
- 只能进行GET请求
- 可被注入(callback=alert(1);)
- 需要校验身份(Token)
CORS
- b.com 声明:我允许 a.com 来访问我
- a.com 中的 JS 发起对 b.com 的 ajax
实践:自己实现 CORS
Cross-Origin Resource Sharing ——跨域资源共享
其他方式
- HTML5 postMessage
- hash
- window.name
完
下一节课:动态页面串讲《一个增删改查页面》
同源策略与跨域请求
By 方方
同源策略与跨域请求
- 2,097