代码改变世界

为什么我的请求路径中多了/ 还是能正确请求到我的接口??

2023-12-18 15:07  话猫  阅读(576)  评论(0编辑  收藏  举报

  问题:最近测试时发现postman输入了错误了请求路径也能正确路由到我后端的接口,这是为什么呢?

  举例:请求路径 /rest/ceshi/testa/testb?id=1 是后端正确的url

     当把路径中随意/处再增加多个/时,例如请求路径:/rest/ceshi///testa/testb?id=1,任然能正常请求到接口。

  分析

    在一些Web框架中,路径中多余的斜杠(/)通常会被视为一个斜杠。这是因为在URL解析过程中,多个连续的斜杠被视为一个斜杠,以保持路径的一致性和可读性。

例如,对于以下两个URL:

  • /api/user
  • /api//user

  这两个URL实际上被视为相同的路径/api/user。因此,如果你的请求路径多加了一个斜杠,仍然可以映射到Controller的接口,这是正常行为。

  在大多数Web框架中,路径匹配是基于模式匹配的,而不是严格的字符串匹配。因此,路径中的额外斜杠不会影响路由的匹配过程。

  然而,具体的行为可能因不同的框架而异,因此这可能只是一种常见的行为。如果你使用的是特定的框架或工具,请查阅其文档以了解更多关于路径匹配的规则和行为。

  springBoot处理:

  Spring Boot 中的路径匹配是由 PathPatternParser 类负责的。在这个类中,有一个方法 parse,它会将请求路径解析成一个 PathPattern 对象。在解析过程中,会将路径中间的多余 / 自动忽略,并将它们视为一个 /

具体来说,PathPatternParser 类会将请求路径按照 / 分隔成若干个部分,然后逐个处理这些部分。如果当前部分为空字符串或者为 /,则忽略它;否则,将它添加到路径模式中。这样就能够处理路径中间的多余 /,并将它们视为一个 /