Access-Control-Allow-Methods 设置后为什么 OPTIONS 请求还是失败?
我在前端用 fetch 发了个 POST 请求到后端接口,但浏览器先发了个 OPTIONS 预检请求,结果返回 405。后端明明在响应头里加了 Access-Control-Allow-Methods: POST, GET, OPTIONS,为啥还是不行?
我试过在 Nginx 里配这个头,也试过后端代码里手动设置,但 OPTIONS 请求始终被拒绝。是不是还要额外处理 OPTIONS 请求本身?
fetch('https://api.example.com/data', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ foo: 'bar' })
})
后端得专门接收OPTIONS请求并返回200:
Nginx里也得保证OPTIONS不被拒绝:
总之:Access-Control-Allow-Methods是告诉浏览器能用什么方法,但你得先让OPTIONS请求活着回来,浏览器才能读到这些头。