把项目部署到测试环境,发现get和post跨域请求好使,delete,put,patch都不行

这里看到Request Method是OPTIONS,百度了解了简单请求(GET,POST)和复杂请求(DELETE,PUT,PATCH),参考转载的另一篇博文 https://blog.youkuaiyun.com/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

本文介绍了解决跨域请求中DELETE、PUT和PATCH等复杂请求的问题,通过在Nginx中增加对OPTIONS方法的处理,使得服务器能正确响应预检请求,从而实现跨域资源的正常操作。
720





