前端开发专题

JSONP_跨域

2017-09-13  本文已影响50人  YM雨蒙

什么是同源策略?

同源是浏览器出于安全方面的考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。

由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略

同源三大要素:,就是必须协议、域名、端口都一致的,才叫做同源

看一些同源例子:

http://jirengu.com/a/b.jshttp://jirengu.com/index.php (同源)

不同源的例子:

http://jirengu.com/main.jshttps://jirengu.com/a.php (协议不同)
http://jirengu.com/main.jshttp://bbs.jirengu.com/a.php(域名不同,域名必须完全相同才可以)
http://jiengu.com/main.jshttp://jirengu.com:8080/a.php (端口不同,第一个是80)

需要注意的是: 对于当前页面来说页面存放的 JS 文件的域不重要,重要的是加载该 JS 页面所在什么域

同源策略的目的是什么:

  1. 为了保证用户信息的安全,防止恶意网站窃取数据
  2. Cookie 往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还规定,提交表单不受同源政策的限制。
  3. 所以同源策略非常重要,不然cookie可以共享,互联网没有安全可言。

限制范围

  1. Cookie(window.domain)
  2. DOM无法获取(iframe和window.open打开的窗口)(window.domain)(window.postMessage)
  3. AJAX请求不能发送

如何规避这些限制呢??
规避限制一: cookie

document.domain
Set-Cookie: key=value; domain=.example.com; path=/

完成了cookie的植入,通过这种策略就完成了网站的统一认证登入,这个在cookie中就会有一个相对比较重要的cookie参数

规避限制二: iframe
如果两个网页不同源,就无法拿到对方的DOM。

解决方法:
片段识别符(fragment identifier)

window.name

跨文档通信API(Cross-document messaging)

限制规避三: Ajax

  1. JSONP是服务器与客户端跨源通信的常用方法。最大特点就是简单适用,老式浏览器全部支持,服务器改造非常小。
    它的基本思想是,网页通过添加一个<script>元素,向服务器请求JSON数据,这种做法不受同源政策限制;服务器收到请求后,将数据放在一个指定名字的回调函数里传回来。
  2. WebSocket是一种通信协议,使用ws://(非加密)和wss://(加密)作为协议前缀。该协议不实行同源政策,只要服务器支持,就可以通过它进行跨源通信。
  3. CORS这个是现在用到比较广的一种方式,全称是”跨域资源共享”。

后面重点讲解ajax的不同源解决方案

什么是跨域?跨域有几种实现形式

先了解一下什么是跨域

跨域就是允许不同域的接口进行交互,说白点就是post、get的url不是你当前的网站,域名不同。

JSONP 的原理是什么

专业总结就是
开启mock server主要是启用router.js 作为js去执行,有这个函数
不用https协议,只是file协议就可以点击,实现跨域
JSONP
callback

CORS是什么

cors

降域

降域其实是吧域名降一个等级

document.domain
降域

postMessage

postMessage

参考
代码地址
wikipedia-JSONP
wikipedia-CORS

上一篇 下一篇

猜你喜欢

热点阅读