【问题标题】:Ruby Net::HTTP second request when timeoutRuby Net::HTTP 超时时的第二次请求
【发布时间】:2019-11-13 19:10:10
【问题描述】:

我注意到当一个 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"))

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

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

【问题讨论】:

    标签: ruby http net-http


    【解决方案1】:

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

    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"))
    

    【讨论】:

      猜你喜欢
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2010-12-12
      相关资源
      最近更新 更多