You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS API Gateway配置:限制非GET/POST方法返回405

解决AWS根URL非GET/POST方法返回405的问题

先排查API Gateway核心配置(最可能的问题点)

  • 清理多余方法,保证匹配优先级:进入API Gateway控制台的根路径(/),删除除GET、POST、ANY之外的所有方法(比如手动添加过的PUT、DELETE)。API Gateway会优先匹配具体HTTP方法,只有当请求方法无对应配置时才会走ANY方法,残留的其他方法会直接绕过你的405规则。
  • 正确配置ANY方法为Mock返回405:
    1. 给根路径添加ANY方法,集成类型选择MOCK(无需关联Lambda,直接返回固定响应)。
    2. 进入集成响应,添加状态码405,同时在响应头里新增Allow字段,值设为GET,POST(符合HTTP规范,明确告知客户端允许的方法)。
    3. 在方法响应中同步添加405状态码和Allow响应头。
  • 务必部署API变更:所有配置修改完成后,点击控制台顶部的Deploy API,选择对应的部署阶段(如prod)。很多人会忽略这一步,导致配置完全未生效。

检查Lambda中间件逻辑(API Gateway配置无效时)

  • 确认请求是否到达Lambda:去CloudWatch日志查看对应Lambda的调用记录,验证非GET/POST请求是否真的传到了Lambda。如果没传到,说明API Gateway路由仍有问题;如果传到了,检查中间件逻辑:
    1. 确保在Lambda入口最外层就校验请求方法,示例代码(Python):
      import json
      
      def lambda_handler(event, context):
          method = event.get('httpMethod')
          if method not in ['GET', 'POST']:
              return {
                  'statusCode': 405,
                  'headers': {
                      'Allow': 'GET,POST',
                      'Content-Type': 'application/json'
                  },
                  'body': json.dumps({'error': 'Method Not Allowed'})
              }
          # 后续业务逻辑处理
      
    2. 若使用Serverless、Express等框架,要确保中间件是全局生效的,而非仅绑定到特定路由,根路径请求必须经过方法校验。

其他排查点

  • CloudFront缓存干扰:如果用了CloudFront做CDN,可能缓存了旧响应。可临时禁用缓存或手动清除CloudFront缓存后再测试。
  • 自定义域名路由:检查自定义域名是否正确关联到最新部署的API Gateway阶段,避免请求路由到旧配置。

验证方法

用curl命令测试不同请求方法:

# 测试PUT方法,应返回405
curl -X PUT https://your-api-domain/ -v
# 测试DELETE方法,应返回405
curl -X DELETE https://your-api-domain/ -v
# 测试GET/POST,应正常响应
curl -X GET https://your-api-domain/ -v

内容的提问来源于stack exchange,提问作者Kenzo_Gilead

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:30:18