From 94921293dbdbdf7fe49023fe7ed8908e05d3615f Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 7 Dec 2004 10:50:26 +0000 Subject: [PATCH] Added indifference to whether @headers["Content-Type"], @headers["Content-type"], or @headers["content-type"] is used. Added proper handling of HEAD requests, so that content isnt returned (Request#head? added as well) #277 [Eric Hodel] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@57 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 6 +++++- actionpack/lib/action_controller/cgi_process.rb | 13 +++++++++---- actionpack/lib/action_controller/request.rb | 4 ++++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 6632cdeff15..4d39e25d539 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,7 +1,11 @@ *SVN* +* Added proper handling of HEAD requests, so that content isn't returned (Request#head? added as well) #277 [Eric Hodel] + +* Added indifference to whether @headers["Content-Type"], @headers["Content-type"], or @headers["content-type"] is used. + * Added TestSession#session_id that returns an empty string to make it easier to functional test applications that doesn't use - cookie-based sessions [jcf] + cookie-based sessions #275 [jcf] * Fixed that cached template loading would still check the file system to see if the file existed #258 [Andreas Schwarz] diff --git a/actionpack/lib/action_controller/cgi_process.rb b/actionpack/lib/action_controller/cgi_process.rb index 8610f608548..abc743246f0 100644 --- a/actionpack/lib/action_controller/cgi_process.rb +++ b/actionpack/lib/action_controller/cgi_process.rb @@ -107,7 +107,10 @@ module ActionController #:nodoc: $stdout.binmode if $stdout.respond_to?(:binmode) $stdout.sync = false print @cgi.header(@headers) - if @body.respond_to?(:call) + + if @cgi.head? + return + elsif @body.respond_to?(:call) @body.call(self) else print @body @@ -116,9 +119,11 @@ module ActionController #:nodoc: private def convert_content_type!(headers) - if headers["Content-Type"] - headers["type"] = headers["Content-Type"] - headers.delete "Content-Type" + %w( Content-Type Content-type content-type ).each do |ct| + if headers[ct] + headers["type"] = headers[ct] + headers.delete(ct) + end end end end diff --git a/actionpack/lib/action_controller/request.rb b/actionpack/lib/action_controller/request.rb index d58cf585434..9eb0b04ef01 100755 --- a/actionpack/lib/action_controller/request.rb +++ b/actionpack/lib/action_controller/request.rb @@ -26,6 +26,10 @@ module ActionController method == :delete end + def head? + method == :head + end + # Determine originating IP address. REMOTE_ADDR is the standard # but will fail if the user is behind a proxy. HTTP_CLIENT_IP and/or # HTTP_X_FORWARDED_FOR are set by proxies so check for these before