Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Avoid URI parsing

This parsing is unecessary once the Request object already has the
needed information.
  • Loading branch information...
commit 85e424de6c9dea71edeb51d966014673c9631df3 1 parent 040a1db
@andrielfn andrielfn authored
View
13 actionpack/lib/action_dispatch/middleware/ssl.rb
@@ -32,11 +32,14 @@ def call(env)
private
def redirect_to_https(request)
- url = URI(request.url)
- url.scheme = "https"
- url.host = @host if @host
- url.port = @port if @port
- headers = { 'Content-Type' => 'text/html', 'Location' => url.to_s }
+ host = @host || request.host
+ port = @port || request.port
+
+ location = "https://#{host}"
+ location << ":#{port}" if port != 80
+ location << request.fullpath
+
+ headers = { 'Content-Type' => 'text/html', 'Location' => location }
[301, headers, []]
end
View
7 actionpack/test/dispatch/ssl_test.rb
@@ -196,6 +196,13 @@ def test_redirect_to_host_and_port
response.headers['Location']
end
+ def test_redirect_to_host_with_port
+ self.app = ActionDispatch::SSL.new(default_app, :host => "ssl.example.org:443")
+ get "http://example.org/path?key=value"
+ assert_equal "https://ssl.example.org:443/path?key=value",
+ response.headers['Location']
+ end
+
def test_redirect_to_secure_host_when_on_subdomain
self.app = ActionDispatch::SSL.new(default_app, :host => "ssl.example.org")
get "http://ssl.example.org/path?key=value"
Please sign in to comment.
Something went wrong with that request. Please try again.