原来项目一直用的axios,可用通过Qs.stringify序列化一次将请求格式转化为formData,这样就能不发送options
新项目改用了fetch,发送的options被阻止不允许跨域,使用QS序列化依旧还是发送了options
我的意思是让后端接收到的options直接默认通过然后就能继续发送post
后端的意思是请求在nginx就被拦截了还没有到后端代码,nginx设置允许options也不行,让我把options预请求取消了
请问fetch能否处理这种情况呢
原来项目一直用的axios,可用通过Qs.stringify序列化一次将请求格式转化为formData,这样就能不发送options
新项目改用了fetch,发送的options被阻止不允许跨域,使用QS序列化依旧还是发送了options
我的意思是让后端接收到的options直接默认通过然后就能继续发送post
后端的意思是请求在nginx就被拦截了还没有到后端代码,nginx设置允许options也不行,让我把options预请求取消了
请问fetch能否处理这种情况呢
后端的意思是请求在nginx就被拦截了还没有到后端代码,nginx设置允许options也不行
这蛋扯得毫无逻辑。
nginx
上处理options
请求,则不需要转发到后端,直接在nginx
返回允许跨域就行了。nginx
上处理options
请求,则请求会直接转发到后端,何来的收不到一说。换句话说 options 请求是浏览器行为,不属于开发可控行为,你没有办法去控制,你发送的数据格式与是否发送 options 请求无关,有时候你会看到部分请求没有发送 options 请求是因为之前发送过都已经被浏览器记录起来了,不需要重复请求。
除非你不跨域。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
options请求来自于同源策略,感觉你跟你们后端都没有理解同源策略以及CORS。
options请求是跨域发起post请求的时候自动发出用来确定是否有跨域请求权限的预请求。
一般的操作是NGINX拦截这个请求,并且添加
Access-Control-Allow-Origin
等响应头后直接返回200,用于告知客户端其是否有请求权限的。然后: