把项目部署到测试环境,发现get和post跨域请求好使,delete,put,patch都不行
这里看到Request Method是OPTIONS,百度了解了简单请求(GET,POST)和复杂请求(DELETE,PUT,PATCH),参考转载的另一篇博文 https://blog.csdn.net/xiahuale/article/details/85775671
复杂请求会预先发送options请求给服务器,服务器需要反馈一个成功的Response
解决方法,Nginx增加一个判断,如果是OPTIONS直接返回200
加入如下代码
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;
#支持put和delete请求
return 200;
}
在Nginx中这样配置
location /xxx {
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;
return 200;
}
proxy_pass http://xxx/xx;
}
配置好后,再执行删除资源的操作,可以看到发两次请求
预先发送options请求
收到服务器返回的200后,发送了delete