跨域只会出现在浏览器环境中!

跨域只会出现在浏览器环境中!

跨域只会出现在浏览器环境中!

重要的事情说三遍。

我知道为啥很多后端开发很疑惑为啥有这种问题,因为纯服务端之间应该没有这个概念。

首先解释清楚什么情况下,会被认定成跨域:

页面地址的域名是 A ,但是接口请求的地址是 B 。这就是跨域,跨越了不同的域(名)想要去请求资源。

在浏览器中会发生的现象:

浏览器会阻止给和页面地址不同的域名发请求。

这跟语言无关,这就是一个在浏览器环境下的安全策略。

怎么办:

请把你的页面域名加入白名单。使用响应头 Access-Control-Allow-Origin 来处理。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

或者使用 nginx ,前端请求的接口还是用网页的域名,但是用 ngxin 转发到服务端的地址去。

拓展:

其实后端的响应头是能帮助前端做不少事情的。

比如 Access-Control-Allow-Methods 这个头,能约定接口只能发 post,还是 get

比如 Access-Control-Allow-Headers,后端通常会返回很多响应头字段,

但是在浏览器环境下,为了安全,浏览器只允许 js 访问固定的几个响应头。