【问题标题】:405 Method is not Allowed exception: "Request Method 'T' not supported" for GET call and "Request Method 'ST' not supported" for POST405 Method is not Allowed 例外:GET 调用的“请求方法 'T' 不支持”和 POST 的“请求方法 'ST' 不支持”
【发布时间】:2020-08-22 07:10:39
【问题描述】:

我在我的项目中遇到了一个非常奇怪的问题。它与使用spring响应式webclient bulider的rest API调用有关。它在本地和产品上也可以正常工作,但在向同一端点发出 3 或 4 次请求后异常给出以下错误。 “org.springframework.web.server.MethodNotAllowedException:405 METHOD_NOT_ALLOWED“不支持请求方法'T'” 这是有效的例外,因为方法将“T”用于 Get 方法,“ST”用于 Post 方法。我无法理解为什么两个起始字符从方法名称中截断

请帮我解决这个错误。

【问题讨论】:

  • 你能添加一些代码来理解这个吗?
  • 您必须发布示例代码以明确您的问题。
  • @Manuj 你有想过这个吗?我遇到了同样的问题

标签: spring spring-boot spring-webclient


【解决方案1】:

OP 和我一定是唯一经历过这种情况的人,老实说,我不知道根本原因,但这是我的情况和解决方法。

对我来说,我在 docker 中运行了 2 个服务。一项服务会向另一项服务发出请求。第一个请求总是成功,但随后的请求总是失败。一段时间后,新的请求再次成功。

我推测它一定与持久连接有关。我正在使用 OkHttpClient 库(3.14.9)发出请求。接收请求的服务正在运行 spring webflux,但我认为该服务不是问题。我可以从第一个服务的容器内使用 curl 向它发出重复成功的请求。

OkHttpClient 默认使用保持连接。您可以通过将Connection 标头设置为close 来指定您不想保持连接活动的单个请求。一旦我这样做了,所有请求都会再次起作用。

无论出于何种原因,keep-alive 连接的重用并没有发送整个请求。它总是截断方法的前 2 个字符,这就是 Request method 'T' not supported 的原因。也许第一个请求没有正确结束并吃掉了第二个请求的前 2 个字符。我不知道根本原因。可能是 OkHttpClient 的一个错误

【讨论】:

    猜你喜欢
    • 2012-06-22
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 2018-04-13
    • 2013-03-30
    • 2017-07-01
    • 1970-01-01
    相关资源
    最近更新 更多