diff --git a/lib/roda/proxy.rb b/lib/roda/proxy.rb index 48103be..ff97222 100644 --- a/lib/roda/proxy.rb +++ b/lib/roda/proxy.rb @@ -38,9 +38,16 @@ class Roda client = NetX::HTTPUnix.new(_sock_url) request_class = Net::HTTP.const_get(:"#{env['REQUEST_METHOD'].to_s.downcase.capitalize}") req = request_class.new(_proxy_url.to_s, _proxy_headers) - + env_body = env["rack.input"].read + env_content_type = env['CONTENT_TYPE'] + unless env_body.nil? + req.body = env_body + end + unless env_content_type.nil? + req.content_type = env_content_type + end f_response = client.request(req) -# p f_response + f_response.content_length = nil #prevent duplicate header Content-Length and content-length _respond(f_response) end @@ -71,12 +78,15 @@ class Roda end def _proxy_url uri = URI("#{roda_class.opts[:proxy_path]}#{env['PATH_INFO'][1..-1]}") - uri.query = env['QUERY_STRING'] + if !env['QUERY_STRING'].empty? + uri.query = env['QUERY_STRING'] + end uri end def _proxy_headers - env + env_host = env['HTTP_HOST'].to_s + env_new = env .select { |k, _v| k.start_with? 'HTTP_' } .reject { |k, _v| k == 'HTTP_HOST' } .transform_keys do |k| @@ -85,9 +95,10 @@ class Roda .map(&:capitalize) .join('-') end - .merge({ - 'Host' => "127.0.0.1" - }) + if env_host + env_new.merge!({'Host' => env_host}) + end + env_new end def _respond(proxied_response) @@ -98,6 +109,7 @@ class Roda .each { |k, v| response[k] = v } response.write(proxied_response.body) end + end end