diff options
author | Eric Wong <e@80x24.org> | 2016-07-26 22:13:00 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-07-26 22:33:28 +0000 |
commit | 4d5c57d62e603cbadf6b896489ae49bb197b6fe8 (patch) | |
tree | e8946dae1d18adb055066d1a62fdcd839c6462d9 /lib/yahns/http_client.rb | |
parent | fd0e8f9ed47a5c9316be2306b4d21130c46d7218 (diff) | |
download | yahns-4d5c57d62e603cbadf6b896489ae49bb197b6fe8.tar.gz |
Rack::Lint-compliant applications wouldn't have this problem; but apparently public-facing Rack servers (webrick/puma/thin) all implement this; so there is precedence for implementing this in yahns itself.
Diffstat (limited to 'lib/yahns/http_client.rb')
-rw-r--r-- | lib/yahns/http_client.rb | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/yahns/http_client.rb b/lib/yahns/http_client.rb index 1cdaa0f..873dd73 100644 --- a/lib/yahns/http_client.rb +++ b/lib/yahns/http_client.rb @@ -189,9 +189,11 @@ class Yahns::HttpClient < Kgio::Socket # :nodoc: mkinput_preread # keep looping (@state == :body) true else # :lazy, false - status, headers, body = k.app.call(env = @hs.env) + env = @hs.env + hdr_only = env['REQUEST_METHOD'] == 'HEAD'.freeze + status, headers, body = k.app.call(env) return :ignore if app_hijacked?(env, body) - http_response_write(status, headers, body) + http_response_write(status, headers, body, hdr_only) end end @@ -220,6 +222,7 @@ class Yahns::HttpClient < Kgio::Socket # :nodoc: env['SERVER_PORT'] = '443'.freeze end + hdr_only = env['REQUEST_METHOD'] == 'HEAD'.freeze # run the rack app status, headers, body = k.app.call(env) return :ignore if app_hijacked?(env, body) @@ -229,7 +232,7 @@ class Yahns::HttpClient < Kgio::Socket # :nodoc: end # this returns :wait_readable, :wait_writable, :ignore, or nil: - http_response_write(status, headers, body) + http_response_write(status, headers, body, hdr_only) end # called automatically by kgio_write |