diff options
author | Yves Senn <yves.senn@gmail.com> | 2013-03-13 11:14:49 +0100 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2013-03-13 16:27:47 +0100 |
commit | 8945be464feb8c9ec8c4e7be52e5195f17a1ef5e (patch) | |
tree | a54070d140b34164d06a0a21e6ec433767e72271 | |
parent | b5493c83f5c5ab16878827ae0edf25fbf24825e9 (diff) | |
download | rails-8945be464feb8c9ec8c4e7be52e5195f17a1ef5e.tar.gz rails-8945be464feb8c9ec8c4e7be52e5195f17a1ef5e.tar.bz2 rails-8945be464feb8c9ec8c4e7be52e5195f17a1ef5e.zip |
Http::Headers respects headers that are not prefixed with HTTP_
-rw-r--r-- | actionpack/CHANGELOG.md | 4 | ||||
-rw-r--r-- | actionpack/lib/action_dispatch/http/headers.rb | 14 | ||||
-rw-r--r-- | actionpack/test/dispatch/header_test.rb | 19 |
3 files changed, 30 insertions, 7 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index 157a038b7c..2e31358f87 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,5 +1,9 @@ ## Rails 4.0.0 (unreleased) ## +* Http::Headers respects headers that are not prefixed with HTTP_ + + *Yves Senn* + * Fix incorrectly appended square brackets to a multiple select box if an explicit name has been given and it already ends with "[]" diff --git a/actionpack/lib/action_dispatch/http/headers.rb b/actionpack/lib/action_dispatch/http/headers.rb index dc04d4577b..187e83cbd9 100644 --- a/actionpack/lib/action_dispatch/http/headers.rb +++ b/actionpack/lib/action_dispatch/http/headers.rb @@ -1,6 +1,16 @@ module ActionDispatch module Http class Headers + NON_PREFIX_VARIABLES = %w( + CONTENT_TYPE CONTENT_LENGTH + HTTPS AUTH_TYPE GATEWAY_INTERFACE + PATH_INFO PATH_TRANSLATED QUERY_STRING + REMOTE_ADDR REMOTE_HOST REMOTE_IDENT REMOTE_USER + REQUEST_METHOD SCRIPT_NAME + SERVER_NAME SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE + ) + HEADER_REGEXP = /\A[A-Za-z-]+\z/ + include Enumerable def initialize(env = {}) @@ -32,7 +42,9 @@ module ActionDispatch end def cgi_name(k) - "HTTP_#{k.upcase.gsub(/-/, '_')}" + k = k.upcase.gsub(/-/, '_') + k = "HTTP_#{k.upcase.gsub(/-/, '_')}" unless NON_PREFIX_VARIABLES.include?(k) + k end end end diff --git a/actionpack/test/dispatch/header_test.rb b/actionpack/test/dispatch/header_test.rb index 42432510c3..d3fc83ca12 100644 --- a/actionpack/test/dispatch/header_test.rb +++ b/actionpack/test/dispatch/header_test.rb @@ -3,14 +3,16 @@ require 'abstract_unit' class HeaderTest < ActiveSupport::TestCase def setup @headers = ActionDispatch::Http::Headers.new( - "HTTP_CONTENT_TYPE" => "text/plain" + "CONTENT_TYPE" => "text/plain", + "HTTP_REFERER" => "/some/page" ) end def test_each headers = [] @headers.each { |pair| headers << pair } - assert_equal [["HTTP_CONTENT_TYPE", "text/plain"]], headers + assert_equal [["CONTENT_TYPE", "text/plain"], + ["HTTP_REFERER", "/some/page"]], headers end def test_setter @@ -19,19 +21,24 @@ class HeaderTest < ActiveSupport::TestCase end def test_key? - assert @headers.key?('HTTP_CONTENT_TYPE') - assert @headers.include?('HTTP_CONTENT_TYPE') + assert @headers.key?('CONTENT_TYPE') + assert @headers.include?('CONTENT_TYPE') end def test_fetch_with_block assert_equal 'omg', @headers.fetch('notthere') { 'omg' } end - test "content type" do + test "accessing http header" do + assert_equal "/some/page", @headers["Referer"] + assert_equal "/some/page", @headers["referer"] + assert_equal "/some/page", @headers["HTTP_REFERER"] + end + + test "accessing special header" do assert_equal "text/plain", @headers["Content-Type"] assert_equal "text/plain", @headers["content-type"] assert_equal "text/plain", @headers["CONTENT_TYPE"] - assert_equal "text/plain", @headers["HTTP_CONTENT_TYPE"] end test "fetch" do |