同源策略(Sameorigin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
同源策略是处于对用户安全的考虑,如果非同源就会受到以下限制:
- Cookie不能读取
- Dom无法获得
- Ajax请求不能发送
但是事实是经常需要借助非同源来提供数据,所以就需要进行跨域请求。所谓同源是指,域名,协议,端口相同。当浏览器运行一个JS脚本时会进行同源检测,如果不同源是不能执行的。
通过Nginx处理跨域请求问题
users节点这么干主要是为了解决如下问题:
对于简单请求,如GET,只需要在HTTP Response后添加Access-Control-Allow-Origin。
对于非简单请求,比如POST、PUT、DELETE等,浏览器会分两次应答。第一次preflight(method: OPTIONS),主要验证来源是否合法,并返回允许的Header等。第二次才是真正的HTTP应答。所以服务器必须处理OPTIONS应答。
再第一次preflight后会重定向请求(HTTP 301),并且数据丢失,post变成get。
利用nginx的反向代理,这样发出的请求就是与当前页同源。
参考链接:
HTTP访问控制:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Origin
https://segmentfault.com/a/1190000007276212