CROS跨域

CROS跨域


什么是跨域(CROS)

跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。

为什么不允许跨域

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

同源策略限制以下几种行为:

  1. Cookie、LocalStorage 和 IndexDB 无法读取
  2. DOM 和 Js对象无法获得
  3. AJAX 请求不能发送

如何解决跨域问题

由于前后端项目往往部署在不同服务器,或者不同端口上,会产生资源的跨域问题。解决办法如下:

利用jsonp

设置资源为允许跨域

原理是在响应头中添加 Access-Control-Allow-Origin 字段,值设置为*,( *表示任意域都可以请求此资源)

spring中的@CrossOrigin 实现的跨域,就是基于此原理。

Nginx反向代理

首先,让我们了解一下什么是代理。

比如,A想访问C的资源,但A并不直接访问,而是通过B来访问C的资源,这里的B就是A的代理。这种代理方式也叫做正向代理。

这里举两个方便理解的例子:

  1. 正向代理:A向C借钱,由于一些情况不能直接向C借钱,于是A想了一个办法,他让B去向C借钱,这样B就代替A向C借钱,A就得到了C的钱,C并不知道A的存在,B就充当了A的代理人的角色。
  2. 反向代理:A向B借钱,B没有拿自己的钱,而是悄悄地向C借钱,拿到钱之后再交给A,A以为是B的钱,他并不知道C的存在。
  • 正向代理隐藏真实客户端,正向代理代理的对象是客户端
  • 反向代理隐藏真实服务端,反向代理代理的对象是服务端

而Nginx就可以做到反向代理,Nginx和资源服务器属于同一域,所以不存在跨域问题。


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×