summary refs log tree commit
diff options
context:
space:
mode:
authorMartin Ottenwaelter <martin.ottenwaelter@gmail.com>2010-11-02 21:34:25 +0800
committerJoshua Peek <josh@joshpeek.com>2010-11-02 21:59:09 +0800
commit85ca454e6143a3081d90e4546ccad602a4c3ad2e (patch)
treed195547f33795ceb94b6974320225818fc8a1ffd
parent3e4833b55d253b7877c078adf59f394e09ec6e99 (diff)
downloadrack-85ca454e6143a3081d90e4546ccad602a4c3ad2e.tar.gz
HTTP_X_FORWARDED_PROTO can be a list of chained values, eg 'https, http, http'
-rw-r--r--lib/rack/request.rb2
-rw-r--r--test/spec_request.rb4
2 files changed, 5 insertions, 1 deletions
diff --git a/lib/rack/request.rb b/lib/rack/request.rb
index 9f8adfd7..b44b7c8a 100644
--- a/lib/rack/request.rb
+++ b/lib/rack/request.rb
@@ -66,7 +66,7 @@ module Rack
       if @env['HTTPS'] == 'on'
         'https'
       elsif @env['HTTP_X_FORWARDED_PROTO']
-        @env['HTTP_X_FORWARDED_PROTO']
+        @env['HTTP_X_FORWARDED_PROTO'].split(',')[0]
       else
         @env["rack.url_scheme"]
       end
diff --git a/test/spec_request.rb b/test/spec_request.rb
index 418463e0..3e0a2f2d 100644
--- a/test/spec_request.rb
+++ b/test/spec_request.rb
@@ -253,6 +253,10 @@ describe Rack::Request do
     request = Rack::Request.new(Rack::MockRequest.env_for("/", 'HTTP_X_FORWARDED_PROTO' => 'https'))
     request.scheme.should.equal "https"
     request.should.be.ssl?
+    
+    request = Rack::Request.new(Rack::MockRequest.env_for("/", 'HTTP_X_FORWARDED_PROTO' => 'https, http, http'))
+    request.scheme.should.equal "https"
+    request.should.be.ssl
   end
 
   should "parse cookies" do