什么是跨域
往粗了说,就是一个站点的脚本或者文档企图访问另一个站点的资源,这是一种广义的定义。但通常我们说的是狭义的跨域,而狭义的跨域是和同源策略绑定在一起的。
什么是同源策略
同源策略是浏览器的一种安全策略,是为了防止一个源下的资源去访问另一个源下的资源。所谓同源,是指协议+域名+端口相同。
为什么会有跨域
跨域是实实在在存在的,往小了说,前端加载的静态资源可能来自其他域,比如加载css样式或者图片等,当然这种跨域是允许的。同源策略限制的跨域主要有:
- 一个域读取另一个域的LocalStorage或者Cookie.
- Dom和Js对象无法获得
- Ajax请求不能发送。
如果这些行为被允许,这意味着我可以在一个恶意网站里去请求一些正常网站,比如银行,同时还能带上你刚刚在正常网站登录后留下的cookie, 这样我就可以登录了,然后我在恶意网站里对银行网站发起一些给自己转款的请求……
怎么解决跨域
解决方案比较多,作为后端,我用的比较多的有跨域资源共享(CORS)和Nginx反向代理。
Nginx反向代理
因为同源策略是浏览器的操作,而在服务端跨域是可以正常请求的,反向代理原理也就在这里。以Nginx作为服务端,对于前端的跨域请求,以Nginx作为跳板,在Nginx服务端重新去请求,就可以解决跨域了。