nginx解决跨域问题

259 阅读1分钟

1.什么是跨域? **

  • 跨域是浏览器的安全限制,页面url和http请求的协议、端口、hostname有一项不一致就会跨域。
  • 跨域不拦截请求,只是浏览器会拦截响应

2.nginx如何解决跨域

先看一下nginx的代理流程:(来源sf) Brower => host => nginx => 目标地址 服务器数据 => nginx => Brower

先看一个常规nginx配置:

location /api/ {
	proxy_pass http://xxxx.com;
}

// 将以 /api结尾的请求转发
// 如:http://a.com/api/login ==> http://b.com/login

上面这个配置好理解,就是接口实际的地址在http://b.com上,但是你的网站时a.com,如果直接访问的话就会跨域,所以在这里做了一层转发,转发到b.com。这里自然是没什么问题。

3.遇到的问题 ** 今天在浏览一个项目的时候无意间看到了url和接口请求不一致的,当时就纳闷了,不一致肯定会跨域啊,为什么没报错?难道是nginx配置了?就算nginx配置了应该还会报错啊,难道是先代理再判断是否跨域?这些时间是什么关系啊?

这里可以回头看下上面写的nginx的代理流程,在请求发出的时候就经过nginx的代理,然后服务器的响应数据到nginx再到浏览器,这样浏览器就不会拦截响应了。

4.后续 ** 以上只是我的个人理解,若发现错误再修正。 后续有时间会再深入了解一下,为什么经过nginx转发后的请求浏览器就不会拦截响应。