From b0d10d473bc5fdc9b3f6f1fd4f2d300651b77428 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 30 Jun 2015 22:19:19 +0000 Subject: reflect changes in Rack::Utils::HTTP_STATUS_CODES Applications may want to alter the message associated with HTTP status codes in Rack::Utils::HTTP_STATUS_CODES. Avoid memoizing status lines ahead-of-time Note: this introduces a minor performance regression, but ought to be unnoticeable unless you're running "Hello world"-type apps. --- lib/unicorn/http_response.rb | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'lib/unicorn') diff --git a/lib/unicorn/http_response.rb b/lib/unicorn/http_response.rb index 016dac8..a42303e 100644 --- a/lib/unicorn/http_response.rb +++ b/lib/unicorn/http_response.rb @@ -10,15 +10,12 @@ # is the job of Rack, with the exception of the "Date" and "Status" header. module Unicorn::HttpResponse - # Every standard HTTP code mapped to the appropriate message. - CODES = Rack::Utils::HTTP_STATUS_CODES.inject({}) { |hash,(code,msg)| - hash[code] = "#{code} #{msg}" - hash - } CRLF = "\r\n" + # internal API, code will always be common-enough-for-even-old-Rack def err_response(code, response_start_sent) - "#{response_start_sent ? '' : 'HTTP/1.1 '}#{CODES[code]}\r\n\r\n" + "#{response_start_sent ? '' : 'HTTP/1.1 '}" \ + "#{code} #{Rack::Utils::HTTP_STATUS_CODES[code]}\r\n\r\n" end # writes the rack_response to socket as an HTTP response @@ -26,9 +23,11 @@ module Unicorn::HttpResponse response_start_sent=false) hijack = nil - http_response_start = response_start_sent ? '' : 'HTTP/1.1 ' if headers - buf = "#{http_response_start}#{CODES[status.to_i] || status}\r\n" \ + code = status.to_i + msg = Rack::Utils::HTTP_STATUS_CODES[code] + start = response_start_sent ? ''.freeze : 'HTTP/1.1 '.freeze + buf = "#{start}#{msg ? %Q(#{code} #{msg}) : status}\r\n" \ "Date: #{httpdate}\r\n" \ "Connection: close\r\n" headers.each do |key, value| -- cgit v1.2.3-24-ge0c7