踩坑记录-前端请求如果携带Cookie信息,那么后端Access-Control-Allow-Origin不能为 *...

踩坑记录-前端请求如果携带Cookie信息,那么后端Access-Control-Allow-Origin不能为*

知识点

前端发出的请求如果是附带身份验证(withCredentials:true)

而后端的Access-Control-Allow-Origin如果设置的是*

那么这个请求会失败,在Options预请求时会被拦截下来。

来源 MDN文档 :
https://developer.mozilla.org...

踩坑记录

在一个文件上传的接口出现问题。

  • 1.查看Network发现只有预请求Option
  • 2.查看console控制台,报错

clipboard.png

大概意思是说,在预请求时,请求就失败了。
Access-Control-Allow-Origin不能为 * ,当请求的证书模式为“include”时
这是你的请求没有通过的原因
这个证书模式初始化是通过Ajax的withCredentials属性控制的
  • 3.查看文件上传的vue代码
     <el-upload 
          :action=path 
          :on-success="import_upload_ok" 
          :on-error="import_error" 
          :with-credentials="true" 
          :show-file-list=false 
          :headers=token 
          ref=dom>
        <el-button class="first-btn  upload-btn" type="primary">
          <span class="el-icon-plus"></span>
          同步快递信息
        </el-button>
      </el-upload>

可以看到我设置了:with-credentials="true"

  • 4.查看:with-credentials=“true”是什么意思,根据element文档

clipboard.png

得知with-credentials是用来设置是否支持发送cookie凭证信息的字段

总结

可以理解为这是一条http协议或者CORS的规则。

就是当request中设置了withCredentials : true,也就是请求携带了验证身份信息时,

response的Access-Control-Allow-Origin : *,(而是应该有请求身份过滤)

否则的话,请求会失败。

这里的解决办法有2个,

  • 一个后端设置Access-Control-Allow-Origin做一个身份过滤
  • 一个是前端设置withCredentials:false。也就是前端放弃传递Cookie信息

因为我这里还真没必要传递Cookie身份信息,所以我就选择设置withCredentials:false

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值