【问题标题】:Net::HTTP extremely slow responses for HTTPS requestsNet::HTTP 对 HTTPS 请求的响应极慢
【发布时间】:2015-07-08 19:49:08
【问题描述】:

出于某种原因,在我的开发机器上,通过 Net::HTTP 执行的 HTTPS 请求的响应非常非常缓慢。我试过 RestClient 和 HTTParty ,他们都有同样的问题。它似乎是从哪里冒出来的。我已经提出了数百次这些请求而没有问题,但今天它们的速度慢得令人难以忍受。

pry(main)> puts Time.now; HTTParty.get('https://api.easypost.com/v2/addresses'); puts Time.now;
2015-04-29 08:07:08 -0500
2015-04-29 08:09:39 -0500

如您所见,响应需要 2.5 分钟。不仅仅是这个 EasyPost API URL。我已经向我知道可以连接的服务器(https://google.comhttps://weather.com 等)尝试了许多 SSL 请求,它们都导致相同的行为。另外,我注意到从 HTTP 重定向到 HTTPS 的请求也会发生同样的情况。现在,检查一个非 ssl 请求:

pry(main)> puts Time.now; HTTParty.get('http://lookitsatravis.com'); puts Time.now;
2015-04-29 08:12:22 -0500
2015-04-29 08:12:22 -0500

瞬间。是什么赋予了?我猜这是 Ruby 和 OpenSSL 之间的某个配置问题。我已经重新安装了两者(使用 Ruby 2.2.1 和 OpenSSL 1.0.2a),并且我正在使用 OS X Yosemite 10.10.2 来获得它的价值。重新安装了我所有的宝石,但问题仍然存在。我尝试更改我的 DNS 设置以防万一,但没有骰子。还有其他我可以查看的地方或我可以更改的任何配置来解决此问题吗?

【问题讨论】:

  • 可能是网络问题,即某些中间盒进行流量整形。检查同一台机器上的其他软件,看看它是特定于机器还是真的只发生在 ruby​​ 上。
  • @SteffenUllrich 我刚刚检查了 cURL/wget/Postman...cURL 和 Postman 工作正常,但 wget 不起作用。它具有完全相同的行为。有趣的是,我注意到 wget 首先尝试连接到 IPv6 地址,但失败了。当它连接到 IPv4 地址时,它会立即完成。所以,我相信问题出在 IPv6 上……
  • 感谢@SteffenUllrich - 是 IPv6 导致了这个问题。禁用它可以解决问题。

标签: ruby ruby-on-rails-4 ssl openssl net-http


【解决方案1】:

问题不在于 Ruby 或 OpenSSL 或任何上述库。问题是我的 MacBook 上没有解析 IPv6 地址。 DNS 查找首先返回 IPv6 地址,因此库尝试连接到该地址,直到超时,然后它们连接到正常工作的 IPv4 地址。

为 OS X Yosemite 10.10.2 禁用 IPv6 对我有用。这并不理想,但在我确定另一种解决方案之前,它会起作用。

networksetup -setv6off "Wi-Fi"

感谢@SteffenUllrich 为我指明了这个方向。

【讨论】:

    【解决方案2】:

    为我解决问题的是禁用防病毒软件

    【讨论】:

      猜你喜欢
      • 2020-10-10
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      相关资源
      最近更新 更多