タグ

2015年6月22日のブックマーク (2件)

  • Bug #5790: net/http の EOFError と Keep-Alive - Ruby master - Ruby Issue Tracking System

    [ruby-dev:39421] がずっと心に残っていたので、思い立って調べてみたので、 (正確には自分が高頻度で踏むようになったので調べてみた) その調査結果と対策案を提案します。 まず、投げられる原因ですが、根的な原因は Keep-Alive のタイムアウトです。 HTTP/1.1 ではデフォルトで持続的接続を行うので、複数回のリクエストに渡って 一つの socket が使い回されます。 しかし、リクエスト同士で時間が開いていると、サーバー側でタイムアウトする 可能性があります。この時にクライアント側の read(2) が 0 を返す、 つまり EOFError となることがあります。 HTTP/1.1 は、冪等なメソッドの場合には確認なしにリトライすべきと言っているので、 そのようにするパッチを添付します。 冪等でないメソッドの場合にどうするべきかは悩ましいところです。 http:

    hoppie
    hoppie 2015/06/22
  • Net::HTTP#set_debug_output - @kyanny's blog

    Net::HTTP で通信してる内容をのぞくには set_debug_output に io を渡す。ヘッダもボディも全部出るので外部 API の呼び出しをするコードのデバッグとかに便利。 http = Net::HTTP.new('example.com', 80) http.set_debug_output($stderr) http.get('/') あんまし見やすくはない。 StringIO とか使ってうまく改行を整形した状態で出力できないかなと思ったけどうまくいかなかった。 ぐぐってもあまり出てこないけど undocumented というわけではないみたいだし知ってる人は知ってるみたい。 net/http - 詳細なログを出力させる - 技術メモ帳 Rubynet/http でHTTPリクエスト/レスポンスをdumpする方法 - ( ꒪⌓꒪) ゆるよろ日記 Class: Net

    Net::HTTP#set_debug_output - @kyanny's blog
    hoppie
    hoppie 2015/06/22