一个前后端分离项目上线因OPTIONS请求403引发的思考

最近在上线Vue+Vue Router(history模式)的前后端分离项目时,发现所有的 预检请求(preflight request)都403报错。然而后端反馈已经添加注解允许跨域(具体如何操作,本文暂不描述,可以去自行搜索)。于是排查是否是nginx不支持options请求,并成功定位问题。

于是思考如何避免这个问题:

1. 不使用跨域

2. 不发送options预检请求

最后商量决定使用第二张方法。

下面总结一下 关于options 请求的一些http知识,这些在MDN上有具体描述。我只描述一些个人理解。

浏览器为什么要发送预检请求

规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)。

CORS请求失败会产生错误,但是为了安全,在JavaScript代码层面是无法获知到底具体是哪里出了问题。你只能查看浏览器的控制台以得知具体是哪里出现了错误。

什么情况下发送预检请求

关于这个问题,我们要首先知道什么叫

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值