poseidon-http-client#

HTTP/1.1、HTTP/2、HTTP/3 をフルスクラッチで実装した Go 向け低レベル HTTP クライアントです。フレーミング、HPACK、QPACK、QUIC スタックまで、すべて自前で実装しています。net/http もサードパーティのプロトコルコードも使用しません。直接依存は 4 つ(golang.org/x/net、ChaCha20-Poly1305 用の golang.org/x/cryptogithub.com/andybalholm/brotli、zstd 用の github.com/klauspost/compress)で、いずれも暗号と圧縮のプリミティブです。TLS 1.3 は標準ライブラリを利用します。3 つのプロトコルバージョンすべてが DoDoStream という単一のリクエスト API を共有します。コネクション、ストリーム、フロー制御をきめ細かく制御したい負荷生成ツール向けに設計されており、net/http の汎用的な代替を目指すものではありません。

MIT ライセンス。Go 1.25 以上が必要です。ソース: github.com/lodgvideon/poseidon-http-client

poseidon を使う理由#

  • 1 つのクライアントで 3 つのプロトコルバージョン — HTTP/1.1、/2、/3 を同一の Do/DoStream API で扱えます。Go 標準ライブラリに HTTP/3 はありません。
  • サードパーティのプロトコルコードなし — QUIC、HTTP/3、QPACK、HTTP/2、HPACK、HTTP/1.1 はすべてこのモジュール内で実装しています。quic-go なし、nghttp2 なし、cgo なし。直接依存の 4 つは暗号と圧縮のプリミティブ(ChaCha20-Poly1305、Brotli、zstd)で、意図的に採用したものです。AEAD やデコンプレッサの自前実装はセキュリティ上の負債であって、機能ではないからです。
  • ゼロアロケーションのワイヤーコーデック — HTTP/2(frame、HPACK)と HTTP/3(QPACK、HTTP/3 フレーム、QUIC のフレームとパケットヘッダー)のエンコード/デコードは 0 B/op、0 allocs/op。CI のベンチマークゲートで強制しています。
  • きめ細かな制御 — ストリーム、フロー制御ウィンドウ、SETTINGS、プーリングポリシー、輻輳制御(NewReno または BBR)。net/http が隠している調整点に直接触れられます。
  • 負荷生成向け機能を標準装備 — コネクションプーリング、DNS サービスディスカバリ、リトライ、レート制限、フックとメトリクス。3 つのプロトコルバージョンすべてで共通です。
  • RFC 準拠テスト済み — RFC のセクションに紐付いた約 200 の準拠テスト、実 UDP 上での 3 サーバー HTTP/3 相互運用マトリクス(Caddy、nginx、aioquic)、ワイヤーパーサーのファジング、全体を -race で検証しています。

ガイド#

**リリース間もないソフトウェアです。** これは初回リリースであり、セキュリティ上重要なプロトコル(TLS 1.3、QUIC、HPACK/QPACK)をフルスクラッチで実装しています。第三者によるセキュリティ監査は受けていません。現状のまま(as is)提供され、利用は自己責任です(MIT — 無保証)。デプロイ前に[免責事項](/poseidon-http-client/ja/docs/disclaimer/)をお読みください。