mirror of
https://github.com/puma/puma.git
synced 2022-11-09 13:48:40 -05:00
Honor if an app sets Content-Length
This commit is contained in:
parent
1657f579d7
commit
b7953adb67
2 changed files with 37 additions and 21 deletions
|
@ -253,6 +253,23 @@ module Puma
|
|||
client.write HTTP_STATUS_CODES[status]
|
||||
client.write "\r\n"
|
||||
|
||||
colon = ": "
|
||||
line_ending = "\r\n"
|
||||
|
||||
headers.each do |k, vs|
|
||||
if k == "Content-Length"
|
||||
content_length = vs
|
||||
next
|
||||
end
|
||||
|
||||
vs.split("\n").each do |v|
|
||||
client.write k
|
||||
client.write colon
|
||||
client.write v
|
||||
client.write line_ending
|
||||
end
|
||||
end
|
||||
|
||||
client.write "Connection: close\r\n" unless keep_alive
|
||||
|
||||
if content_length
|
||||
|
@ -262,18 +279,6 @@ module Puma
|
|||
chunked = true
|
||||
end
|
||||
|
||||
colon = ": "
|
||||
line_ending = "\r\n"
|
||||
|
||||
headers.each do |k, vs|
|
||||
vs.split("\n").each do |v|
|
||||
client.write k
|
||||
client.write colon
|
||||
client.write v
|
||||
client.write line_ending
|
||||
end
|
||||
end
|
||||
|
||||
client.write line_ending
|
||||
|
||||
if res_body.kind_of? String
|
||||
|
|
|
@ -33,7 +33,7 @@ class TestPersistent < Test::Unit::TestCase
|
|||
@client << @valid_request
|
||||
sz = @body[0].size.to_s
|
||||
|
||||
assert_equal "HTTP/1.1 200 OK\r\nContent-Length: #{sz}\r\nX-Header: Works\r\n\r\n", lines(4)
|
||||
assert_equal "HTTP/1.1 200 OK\r\nX-Header: Works\r\nContent-Length: #{sz}\r\n\r\n", lines(4)
|
||||
assert_equal "Hello", @client.read(5)
|
||||
end
|
||||
|
||||
|
@ -41,13 +41,13 @@ class TestPersistent < Test::Unit::TestCase
|
|||
@client << @valid_request
|
||||
sz = @body[0].size.to_s
|
||||
|
||||
assert_equal "HTTP/1.1 200 OK\r\nContent-Length: #{sz}\r\nX-Header: Works\r\n\r\n", lines(4)
|
||||
assert_equal "HTTP/1.1 200 OK\r\nX-Header: Works\r\nContent-Length: #{sz}\r\n\r\n", lines(4)
|
||||
assert_equal "Hello", @client.read(5)
|
||||
|
||||
@client << @valid_request
|
||||
sz = @body[0].size.to_s
|
||||
|
||||
assert_equal "HTTP/1.1 200 OK\r\nContent-Length: #{sz}\r\nX-Header: Works\r\n\r\n", lines(4)
|
||||
assert_equal "HTTP/1.1 200 OK\r\nX-Header: Works\r\nContent-Length: #{sz}\r\n\r\n", lines(4)
|
||||
assert_equal "Hello", @client.read(5)
|
||||
end
|
||||
|
||||
|
@ -56,7 +56,7 @@ class TestPersistent < Test::Unit::TestCase
|
|||
|
||||
@client << @valid_request
|
||||
|
||||
assert_equal "HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\nX-Header: Works\r\n\r\n5\r\nHello\r\n7\r\nChunked\r\n0\r\n", lines(9)
|
||||
assert_equal "HTTP/1.1 200 OK\r\nX-Header: Works\r\nTransfer-Encoding: chunked\r\n\r\n5\r\nHello\r\n7\r\nChunked\r\n0\r\n", lines(9)
|
||||
end
|
||||
|
||||
def test_hex
|
||||
|
@ -65,7 +65,7 @@ class TestPersistent < Test::Unit::TestCase
|
|||
|
||||
@client << @valid_request
|
||||
|
||||
assert_equal "HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\nX-Header: Works\r\n\r\n5\r\nHello\r\n#{str.size.to_s(16)}\r\n#{str}\r\n0\r\n", lines(9)
|
||||
assert_equal "HTTP/1.1 200 OK\r\nX-Header: Works\r\nTransfer-Encoding: chunked\r\n\r\n5\r\nHello\r\n#{str.size.to_s(16)}\r\n#{str}\r\n0\r\n", lines(9)
|
||||
|
||||
end
|
||||
|
||||
|
@ -73,7 +73,7 @@ class TestPersistent < Test::Unit::TestCase
|
|||
@client << @close_request
|
||||
sz = @body[0].size.to_s
|
||||
|
||||
assert_equal "HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Length: #{sz}\r\nX-Header: Works\r\n\r\n", lines(5)
|
||||
assert_equal "HTTP/1.1 200 OK\r\nX-Header: Works\r\nConnection: close\r\nContent-Length: #{sz}\r\n\r\n", lines(5)
|
||||
assert_equal "Hello", @client.read(5)
|
||||
end
|
||||
|
||||
|
@ -81,7 +81,7 @@ class TestPersistent < Test::Unit::TestCase
|
|||
@client << @http10_request
|
||||
sz = @body[0].size.to_s
|
||||
|
||||
assert_equal "HTTP/1.0 200 OK\r\nConnection: close\r\nContent-Length: #{sz}\r\nX-Header: Works\r\n\r\n", lines(5)
|
||||
assert_equal "HTTP/1.0 200 OK\r\nX-Header: Works\r\nConnection: close\r\nContent-Length: #{sz}\r\n\r\n", lines(5)
|
||||
assert_equal "Hello", @client.read(5)
|
||||
end
|
||||
|
||||
|
@ -89,7 +89,7 @@ class TestPersistent < Test::Unit::TestCase
|
|||
@client << @keep_request
|
||||
sz = @body[0].size.to_s
|
||||
|
||||
assert_equal "HTTP/1.0 200 OK\r\nContent-Length: #{sz}\r\nX-Header: Works\r\n\r\n", lines(4)
|
||||
assert_equal "HTTP/1.0 200 OK\r\nX-Header: Works\r\nContent-Length: #{sz}\r\n\r\n", lines(4)
|
||||
assert_equal "Hello", @client.read(5)
|
||||
end
|
||||
|
||||
|
@ -98,7 +98,7 @@ class TestPersistent < Test::Unit::TestCase
|
|||
@client << @valid_request
|
||||
sz = @body[0].size.to_s
|
||||
|
||||
assert_equal "HTTP/1.1 200 OK\r\nContent-Length: #{sz}\r\nX-Header: Works\r\n\r\n", lines(4)
|
||||
assert_equal "HTTP/1.1 200 OK\r\nX-Header: Works\r\nContent-Length: #{sz}\r\n\r\n", lines(4)
|
||||
assert_equal "Hello", @client.read(5)
|
||||
|
||||
sleep 3
|
||||
|
@ -108,4 +108,15 @@ class TestPersistent < Test::Unit::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_app_sets_content_length
|
||||
@body = ["hello", " world"]
|
||||
@headers['Content-Length'] = "11"
|
||||
|
||||
@client << @valid_request
|
||||
|
||||
assert_equal "HTTP/1.1 200 OK\r\nX-Header: Works\r\nContent-Length: 11\r\n\r\n",
|
||||
lines(4)
|
||||
assert_equal "hello world", @client.read(11)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue