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

Kong作为API网关时PUT、DELETE方法请求无匹配路由问题咨询

问题根因

  1. 前缀匹配范围过大导致路由匹配逻辑提前终止
    Kong默认对路径做前缀匹配,你第一个路由Host.Data的路径配置为/v1/myhost/data,所有以/v1/myhost/data开头的请求都会先命中这个路由的路径匹配规则。而这个路由仅允许GET、POST方法,当PUT/DELETE请求进来时,路径匹配到该路由但方法不被允许,Kong会直接返回无匹配路由的报错,不会继续向后匹配更长路径的Host.DataById路由。
  2. 动态ID场景路径配置错误
    如果你的PUT/DELETE请求是针对带动态ID的资源路径(比如/v1/myhost/data/123),那第二个路由写死的/v1/myhost/data/any路径无法匹配动态ID的请求,也会导致匹配失败。
  3. 配置缩进错误导致路由未加载
    你给出的YAML配置中url字段的缩进比上层name字段多了2个空格,不符合YAML语法规范,可能导致第二个路由配置根本没有被正确加载到Kong中。

解决方案

根据你的实际使用场景选择对应修改方案:

场景1:需要匹配带任意动态ID的单资源路径(如/v1/myhost/data/{id})

修改路由路径配置,将第一个路由设为严格匹配,第二个路由用正则匹配动态ID路径,修复缩进问题后的配置示例如下:

service:
 - name: Host.Data
   url: http://myhost.com/data
   routes:
     - name: Host.Data
       methods:
         - GET
         - POST
       paths:
         - /v1/myhost/data$ # 加$后缀表示严格匹配,仅匹配路径完全等于该值的请求
- name: Host.DataById
   url: http://myhost.com/data/any
   routes:
     - name: Host.DataById
       methods:
         - GET
         - PUT
         - DELETE
       paths:
         - ~/v1/myhost/data/[^/]+$ # ~开头表示正则匹配,匹配所有带单个ID的单资源路径

场景2:仅需要匹配/v1/myhost/data/any固定路径

仅修复第一个路由的匹配规则和配置缩进即可:

service:
 - name: Host.Data
   url: http://myhost.com/data
   routes:
     - name: Host.Data
       methods:
         - GET
         - POST
       paths:
         - /v1/myhost/data$ # 严格匹配,不会匹配/v1/myhost/data/开头的子路径
- name: Host.DataById
   url: http://myhost.com/data/any
   routes:
     - name: Host.DataById
       methods:
         - GET
         - PUT
         - DELETE
       paths:
         - /v1/myhost/data/any

配置修改完成后重载Kong配置,即可正常处理PUT、DELETE请求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:36:03