Access-Control-Allow-Methods 响应头必须由服务器设置,用于声明允许跨域的HTTP方法,需与 Access-Control-Allow-Origin 等头协同生效,且预检请求(OPTIONS)必须返回该头及200/204状态码。

JavaScript 本身不能配置 Access-Control-Allow-Methods 响应头——这个头必须由服务器在 HTTP 响应中设置,浏览器才会据此放行跨域请求。前端 JS(如 fetch 或 XMLHttpRequest)只负责发起请求,是否允许该方法(如 PUT、DELETE)跨域,完全取决于服务端返回的响应头是否包含且正确声明了该方法。
服务端必须显式声明允许的方法
这个响应头告诉浏览器:“我允许哪些 HTTP 方法从跨域源调用本资源”。它不是可选的补充项,而是非简单请求(如 PUT、DELETE、带自定义 header 的 POST)能通过预检(OPTIONS)的关键依据。
- 只允许 GET 和 POST:
Access-Control-Allow-Methods: GET, POST - 支持 RESTful 操作:
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS - 注意:值中必须包含
OPTIONS,否则预检请求会失败 - 方法名大小写不敏感,但建议全大写、逗号后加空格,符合惯例
必须搭配其他 CORS 头一起生效
单独设置 Access-Control-Allow-Methods 没有效果。它需要与以下头协同工作:
-
Access-Control-Allow-Origin:指定允许的源(不能为*时若需凭据) -
Access-Control-Allow-Headers:若请求含自定义 header(如Authorization),此头必须列出它们 -
Access-Control-Allow-Credentials:若前端设credentials: 'include',此头需为true,且Origin不能是*
特别注意 OPTIONS 预检请求的处理
当浏览器判断请求“复杂”(比如方法是 PUT、Content-Type 是 application/json),会先发一个 OPTIONS 请求。此时服务端必须:
立即学习“Java免费学习笔记(深入)”;
- 对
OPTIONS方法返回 200 或 204 状态码 - 在该响应中完整返回所有 CORS 头,包括
Access-Control-Allow-Methods - 不能跳过或仅对 GET/POST 设置该头
常见后端配置示例
不同框架写法不同,但本质都是在响应前注入该头:
-
Node.js(原生):
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') -
Express + cors 中间件:
app.use(cors({ methods: ['GET', 'POST', 'PUT', 'DELETE'] })) -
ASP.NET Core:在 CORS 策略中调用
WithMethods("GET", "POST", "PUT") -
Nginx(反向代理层):
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';


















