什么是跨域?
在浏览器上当前访问的网站,向另一个网站发送请求,用于获取数据的过程就是跨域请求。
跨域,是浏览器的同源策略决定的,是一个重要的浏览器安全策略,用于限制一个 origin 的文档或者它加载的脚本与另一个源的资源进行交互,它能够帮助阻隔恶意文档,减少可能被攻击的媒介,可以使用 CORS 配置解除这个限制。
什么是同源策略?
同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击,同源策略能够限制以下行为:
- Cookie、LocalStorage 和 IndexDB 无法读取
- DOM 和 JS对象无法获得
- AJAX 请求不能发送
注意:跨域限制是浏览器的机制,如果直接在服务端请求,是不会触发跨域限制的。
同源/不同源?
跨域解决方案:
- 通过jsonp跨域
- document.domain + iframe跨域
- location.hash + iframe
- window.name + iframe跨域
- postMessage跨域
- 跨域资源共享(CORS)
- nginx代理跨域
- nodejs中间件代理跨域
- WebSocket协议跨域
什么是跨域资源共享(CORS)?
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
普通跨域请求,只服务端设置Access-Control-Allow-Origin即可,前端无须设置;若要带cookie请求,前后端都需要设置。目前,所有浏览器都支持该功能,CORS也已经成为主流的跨域解决方案。
NGINX代理跨域的原理
NGINX实现代理跨域的原理,实际就是把WEB项目和后端项目放到一个域中,这样就不存在跨域问题了,NGINX根据请求地址去请求不同服务器,也就是真正干活的服务器上的资源。