【Faraday】HTTP/2 でリクエストする
2022/11/01
HTTP/2 でしか何故か受け付けない API があったので調べた
手順
Typhoeus の Faraday 用のミドルウェア(アダプター)、faraday-typhoeus を使う
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'faraday'
gem 'faraday-typhoeus'
end
conn = Faraday.new(url: 'https://example.com') do |conn|
conn.adapter :typhoeus, http_version: :httpv2_0
end
puts conn.get('/').body
動作確認
これで実際に HTTP/2 でリクエストできているのかを確認する
確認方法には nc コマンドを使った
$ ( echo "HTTP/1.1 200 OK"; echo; echo "Hello World" ) | nc -l 5555
HTTP/1.1
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'faraday'
end
conn = Faraday.new(url: 'http://localhost:5555')
puts conn.get('/').body
$ ruby faraday-http2.rb
Hello World
$ ( echo "HTTP/1.1 200 OK"; echo; echo "Hello World" ) | nc -l 5555
GET / HTTP/1.1
User-Agent: Faraday v2.6.0
Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept: */*
Host: localhost:5555
シンプルに Faraday を使うと HTTP/1.1 になっている
HTTP/2
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'faraday'
gem 'faraday-typhoeus'
end
conn = Faraday.new(url: 'http://localhost:5555') do |conn|
conn.adapter :typhoeus, http_version: :httpv2_0
end
puts conn.get('/').body
$ ruby faraday-http2.rb
Hello World
$ ( echo "HTTP/1.1 200 OK"; echo; echo "Hello World" ) | nc -l 5555
GET / HTTP/1.1
Host: localhost:5555
Accept: */*
Accept-Encoding: deflate, gzip
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
User-Agent: Faraday v2.6.0
HTTP/1.1 になっているが、以下が追加されているので HTTP/2 でリクエストできていると判断(しても良さそう?)
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA