为何AWS Lambda上的PATCH请求会出现CORS错误?
PATCH请求CORS错误的排查与解决
- 先确认服务器CORS配置里有没有明确允许
PATCH方法
大部分CORS默认只放行GET、POST、HEAD这类简单请求,得手动把PATCH加到允许的方法列表里:- 要是用Node.js/Express的cors中间件,得指定
methods: ["GET", "POST", "PATCH", ...] - 要是Spring Boot,要么在
@CrossOrigin注解里加methods = {RequestMethod.PATCH},要么全局配置里添上这个方法
- 要是用Node.js/Express的cors中间件,得指定
- 检查OPTIONS预检请求的响应头
打开浏览器开发者工具的网络面板,找到OPTIONS请求,看响应头:- 必须有
Access-Control-Allow-Methods,而且值里得包含PATCH Access-Control-Allow-Origin得设成请求的前端域名(生产环境别用通配符)- 如果请求带了自定义头,
Access-Control-Allow-Headers里也得包含对应的头
- 必须有
- 确认服务器能正确处理OPTIONS请求
有些框架不会自动处理OPTIONS请求,得手动配置返回200/204响应,还要带上正确的CORS头。比如Nginx里要加这么一段规则:if ($request_method = OPTIONS) { add_header Access-Control-Allow-Methods "PATCH, GET, POST, OPTIONS"; add_header Access-Control-Allow-Origin "你的前端域名"; add_header Access-Control-Allow-Headers "Content-Type, Authorization"; return 204; } - 排查缓存或代理问题
有时候浏览器缓存了旧的CORS响应,或者中间的CDN/代理没传对CORS头,可以清下浏览器缓存,或者直接绕开代理测试请求。
内容的提问来源于stack exchange,提问作者Abbas Khoja
相关产品推荐
相关产品推荐

