实际上,预检(OPTIONS) 200 并不代表接口存在,POST 404表示后端没有这个路径,或者说路径不在这个server上。也就是说,跨域是通的,但接口地址是错的/不存在。
现在的网络面板

分别解释各自的意思:
1、OPTIONS是什么?
浏览器在发POST + FormData之前,会先问一句:"我能不能向你这个地址,用POST,带文件,带headers发请求"
这就是CORS预检请求------preflight。
OPTIONS 200说明有一个服务器在这个地址上响应了,并且返回了类似:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST
2、POST 404
表示服务器明确告诉"这里没有 /api ",也就是说接口路径不对。
3、为什么会出现[OPTIONS有,POST没有]?
这是因为很多后端/网关/Nginx会这样配置:
location /api/ {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
if ($request_method = OPTIONS) {
return 200;
}
}
OPTIONS被统一放行,POST再交给后端路由处理。