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

在Vue+Vue Router历史模式的项目上线时遇到预检请求(OPTIONS)403错误。经过排查发现是nginx配置问题。本文探讨了浏览器为何发送预检请求,何时发送以及如何避免,总结了OPTIONS请求的HTTP知识,帮助理解CORS跨域策略。
摘要由CSDN通过智能技术生成

最近在上线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代码层面是无法获知到底具体是哪里出了问题。你只能查看浏览器的控制台以得知具体是哪里出现了错误。

什么情况下发送预检请求

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值