前端面试官最爱:跨域怎么办?

325 阅读2分钟

如果只回答一个JSONP,是不是有点慌。

原本就是需要后端解决的问题,由于是因为浏览器的机制产生的问题,而且后端处理起来简单,所以都在前端问了😂。

问题:

  1. 什么是跨域?
  2. 怎么解决?

问答

Q:什么是跨域?

A: 跨域就是发起请求的域和该请求所指定资源所在的域不一致。是因为浏览器的同源策略,它本身是一种安全机制。只有当域名、端口、协议都相同时,才称为同源。域不一致时,无法访问资源,就是常说的跨域了。

Q:怎么解决?

A:一般不推荐在前端解决,用jsonp也只能实现get的跨域请求。如果非要在前端解决,可以设定一个中间页C。a域和b域,三个不用域利用localhost.hash传值,实现跨域请求。后端处理起来要简单很多,可以在服务端设置CORS跨域资源共享,或者使用nginx代理都非常容易解决。

分析

关于浏览器的同源策略

同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSRF等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

关于jsonp优缺点

优点:

  1. 兼容性好,老版本的浏览器也支持。
  2. 请求完毕后可以通过callback回传数据,可以由调用者来实现页面渲染,和view操作。

缺点:

  1. 仅支持GET请求
  2. 失败时不会返回HTTP状态码
  3. 安全性差