【问题标题】:Spring Cloud Gateway - getting 405 Method not allowedSpring Cloud Gateway - 获取 405 方法不允许
【发布时间】:2021-08-05 15:57:33
【问题描述】:

我在使用 Spring Cloud Gateway 访问我的微服务时遇到问题。其中之一是用户服务,其中包括身份验证端点。它是一个 POST 端点,用户只需发送他/她的电子邮件和密码。

对于服务发现,我使用的是 Eureka。

我面临的问题是,当我通过网关访问该端点时,例如,第一个请求返回 405 Method not Allowed,并且进一步的请求工作正常。有趣的是,调用确实到达了用户服务(我可以在日志中看到 Hibernate 如何查询我的数据库),但网关仍然返回 405。在网关中,app.yml 文件中确实有谓词 Method=GET,POST,PUT,DELETE,所以我认为这应该不是问题。

所有东西也都放在单独的 docker 容器中。

我为每个依赖项使用最新版本的 java 16。

如果您需要我提供任何其他信息,请让我这样做。

非常感谢!

【问题讨论】:

    标签: java spring docker netflix-eureka gateway


    【解决方案1】:

    在我的例子中 timeDuration 是线索,它太短了。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    一般答案:

    这个错误有几个原因:

    1. 使用访问日志检查您的服务是否正常工作。
    2. 当使用 spring cloud 断路器时,如果 GET 请求工作正常并且只有 POST 请求返回 405,那么快速解决方法是增加 timeLimiterConfig 的 timeoutDuration,因为 POST 请求可能比您配置的时间更长, 或者只是在 DEBUG 中启用请求日志记录并检查问题
    3. 如果您在服务中启用了 cors,则在 api-gateway 的 application.yml 文件中添加配置以允许 Origins、Methods、Headers。

    具体案例回答:

    分享你的实现代码。

    【讨论】:

    • timeoutDuration 与 405 无关。
    • 它适用于特定情况,因为 Spring Cloud Gateway 使用 http1.1 协议连接到服务,如果请求花费的时间比定义的时间长,则为 CircuitBreaker 定义的 timeLimiterConfig 的 timeoutDuration 会关闭连接,并且 Spring Cloud Gateway 通过本身为该请求返回 405。可以通过监听spring cloud gateway的request和response来观察
    猜你喜欢
    • 2022-01-07
    • 2014-07-16
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2021-12-20
    • 2022-10-20
    相关资源
    最近更新 更多