前后端分离项目html直接请求,记录在一次前后端分离的项目开发中遇到的坑

本文讨论了在vue项目中遇到的跨域问题,介绍了浏览器预检请求的原因,如何通过移除axios请求头中的特定参数和改变Content-Type为formdata来避免options请求。重点在于解决方法和实现步骤。
摘要由CSDN通过智能技术生成

问题如下图:

在一次实际的项目开发中,我负责前端开发,使用的是vue+axios,后台使用的是php,由于我们的开发环境处于不同的域名和端口下,

所以出现了跨域问题,当然php服务端 可以直接解决这个问题,但是后端设置之后,前端每次都会先发出options请求,然后再post请求,

这说白了,就是每个接口请求两次。我们来分析下原因:

出于安全考虑,并不是所有域名访问后端服务都可以。其实在正式跨域之前,浏览器会根据需要发起一次预检(也就是option请求),用来让服务端返回允许的方法(如get、post),

被跨域访问的Origin(来源或者域),还有是否需要Credentials(认证信息)等。那么浏览器在什么情况下能预检呢?

解决方案:

1,axios 请求头中有其它参数(由于开发需求,请求头中确实加入了其它的一些参数,例如token)

解决办法:把异常参数去掉即可

2,由于axios请求头中默认:Content-Type:application/json,我们改为formdata 向后台发送即可

axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';

这样改完之后, 还需要把数据格式化,接着看:

引入完这个库之后,把传递的数据进行

Qs.stringify({

mobile:this.mobile,

verfiyCode:this.sms_code,

}),

是不是 ok了,然后我们接着发请求,那么options请求就没了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值