Ruby Net::HTTP 超时时的第二次请求

23t*_*tux 5 ruby http net-http

我注意到,当 http 请求超时时,Ruby (2.6.1) 会发出第二个请求。这会导致我们的端点之一出现问题,因为触发了第二个工作线程,从而占用了资源。

您可以在此处查看示例:转到https://beeceptor.com/console/timeout并运行以下代码

require "net/http"

http = Net::HTTP.new("timeout.free.beeceptor.com", 443)
http.read_timeout = 1
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.request(Net::HTTP::Get.new("/Time"))
Run Code Online (Sandbox Code Playgroud)

你可以看到有 2 个请求/Time,所以我想知道:

  1. 这种默认行为的目的是什么?当我使用curl命令执行相同的查询时,我没有收到第二个请求curl --max-time 1 https://timeout.free.beeceptor.com
  2. 我怎样才能影响这种行为?
  3. 或者我做错了什么?

mrz*_*asa 5

它的一个功能是Net::HTTP重试幂等请求。您可以通过设置(在您的情况下为 0)来限制重试次数max_retries

有关该问题的更多信息,请参见Ruby redmine

require "net/http"

http = Net::HTTP.new("timeout.free.beeceptor.com", 443)
http.read_timeout = 1
http.max_retries = 0 # <<<<<<<< the change
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.request(Net::HTTP::Get.new("/Time"))
Run Code Online (Sandbox Code Playgroud)