为什么浏览器发送的POST请求变成了OPTIONS?
我在用 fetch 发送 POST 请求到后端接口,结果浏览器自动先发了个 OPTIONS 请求,而且我的 POST 根本没发出去,这是为啥?
我试过加了 Content-Type: application/json,但还是触发了预检请求。后端也没收到我的数据,控制台只看到 OPTIONS 返回 204。
这是我的请求代码:
fetch('/api/submit', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ name: 'test' })
})
要解决就让后端加 CORS 头,复制这个:
前端不用改,就这样发请求就行。后端处理完 OPTIONS 后,浏览器就会接着发你的 POST。记得后端要支持 CORS 哦,不然还得继续折腾。
我以前也被这玩意整疯过,浏览器非要多此一举,不过现在都习惯了,复制粘贴这几行就完事。