axios 跨域问题:为什么服务端设置了 Access-Control-Allow-Origin 还是不行?

284 阅读1分钟

通常情况下,解决跨域问题,只要在后端设置 Access-Control-Allow-Origin 就可以了,即允许什么样的来源可以访问,另外还有一些相关的配置,诸如Access-Control-Allow-MethodsAccess-Control-Allow-Headers 等等。

还有一个容易忽视的点是,你的请求被浏览器直接拒绝发起。 参考资料:javascript.info/fetch-cross…

image.png

从浏览器的角度来看,跨源请求有两种:“安全”请求和所有其他请求。

“安全”请求必须满足以下条件:

  • 方法:GET、POST 或 HEAD。
  • Header - 我们只能设置: Accept Accept-Language Content-Language Content-Type 为值 application/x-www-form-urlencodedmultipart/form-datatext/plain

而 axios 默认发起的请求 Content-Type 为 application/json

解决方法

为 axios 设置 header

const instance = axios.create({
    baseURL: 'http://192.168.0.145:8080/m',
    timeout: 1000,
    headers: { 'content-type': 'application/x-www-form-urlencoded' },
});