vue请求跨域问题

发布于 2022-09-12 03:09:58 字数 465 浏览 16 评论 0

请问各位大佬,vue,axios发送请求的时候如果参数直接写在url里面就可以请求成功, 但是单独分开写就会报错是啥原因?
后端java已经设置允许了跨域请求的

这里是分开写参数的时候,就会报错
1591586800(1).jpg
1591581884(1).jpg

这里是把参数直接写在url里面的时候,可以请求成功....
1591581945(1).jpg
1591582212(1).jpg

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

浅忆 2022-09-19 03:09:58

虽然你的请求方法是 POST,但如果你的 Content-Type 不是 application/x-www-form-urlencoded 而是 application/json 的时候,也属于非简单请求,前者能成功是因为表单可以发出跨域请求,后者失败是因为非简单请求对服务器有特殊要求,在正式请求之前,浏览器会用 OPTIONS 方法发送一次 HTTP 查询请求(预检请求),先询问服务器,当前网页可以使用的头信息字段等服务器所支持的内容,只有得到肯定答复,浏览器才会发出正式的请求,否则就报错。

ヤ经典坏疍 2022-09-19 03:09:58

post 复杂请求触发 option 请求了吧。

然后你直接放入 url 应该没触发 option 请求。

可以查看一下 network

喜你已久 2022-09-19 03:09:58

是不是出现了OPTIONS请求,有的话 也要加上跨域设置

请远离我 2022-09-19 03:09:58

axios请求类型修改即可,需要了解后台需要使用formData还是json进行传输;

formData设置,axios请求头headers设置application/x-www-form-urlencoded,data传参需要转string:

  headers: { 'content-type': 'application/x-www-form-urlencoded' }, // 请求头,发送FormData格式的数据,必须是 这种请求头。
  data: qs.stringify({mobile: '17664068406'}),  //发送请求要传的FormData参数。必须用 qs.stringify()序列化一下。

json传输:

headers: { 'content-type': 'application/json' }

注意,一般java都使用session验证登陆,所以需要打开withCredentials:true

帅的被狗咬 2022-09-19 03:09:58

问题的原理楼上的都解释的挺清楚了,解决的办法是跟你做后端的哥们说一下,见到所有的OPTIONS请求都放行,这个问题不是前端来处理的,需要后端来解决。

病女 2022-09-19 03:09:58

因为使用 axios.post('/message', {phone: phone}),参数phone是会被带在 body 上而不是 url 上,此时不是一个简单请求。非简单请求会发起预校验,被后端拦截了下来

除了上面说的找后端配置 OPTIONS 请求放行外,还有一个方案就是

axios.post('/message', {
    params: {
        phone: phone
    }
})

这样来写,参数 phone 就会被 axios 解析到 url 里面了,就跟自己往 url 里面拼接是一样的效果

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文