[TOC]

什么是跨域?

浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域.

为什么会跨域?

跨域问题来源于 JavaScript 的同源策略,即只有 协议+主机名+端口号(如存在)相同,则允许相互访问。也就是说 JavaScript 只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对 JS 和 ajax 的, html 本身没有跨域问题,比如 a 标签、 script 标签、甚至 form 标签(可以直接跨域发送数据并接收数据)等。

同源策略的作用

保证用户信息安全,防止恶意网站窃取数据。
非同源下的 cookie 等隐私数据可以被随意获取,非同源下的 DOM 可以被随意操作, ajax 可以任意请求的话,用户的各种隐私肯定会泄漏,对用户造成不同程度的损失。

解决跨域的手段

JSONP

JSONP 是服务器与客户端跨源通信的常用方法。
特点:简单适用,兼容性好(兼容低版本IE)
缺点:只支持 get 请求,不支持 post 请求。
核心思想:网页通过添加一个