Ruby Net::HTTP 第二次请求超时
Ruby Net::HTTP second request when timeout
我注意到当 http 请求超时时,Ruby (2.6.1) 会发出第二个请求。这会导致我们的一个端点出现问题,因为触发了第二个 worker 占用了资源。
你可以在这里看到一个例子:转到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"))
你可以看到有2个请求到/Time
,所以我想知道:
- 此默认行为的目的是什么?当我使用 curl 命令执行相同的查询时,我没有收到第二个请求
curl --max-time 1 https://timeout.free.beeceptor.com
- 我怎样才能影响这种行为?
- 还是我做错了什么?
重试幂等请求是 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"))
我注意到当 http 请求超时时,Ruby (2.6.1) 会发出第二个请求。这会导致我们的一个端点出现问题,因为触发了第二个 worker 占用了资源。
你可以在这里看到一个例子:转到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"))
你可以看到有2个请求到/Time
,所以我想知道:
- 此默认行为的目的是什么?当我使用 curl 命令执行相同的查询时,我没有收到第二个请求
curl --max-time 1 https://timeout.free.beeceptor.com
- 我怎样才能影响这种行为?
- 还是我做错了什么?
重试幂等请求是 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"))