提交 5eef3085 编写于 作者: M Matthew Draper

Merge pull request #23020 from matthewd/frozen-headers

Commit before freezing the headers
......@@ -91,7 +91,7 @@ def etag?; etag; end
DATE = 'Date'.freeze
LAST_MODIFIED = "Last-Modified".freeze
SPECIAL_KEYS = Set.new(%w[extras no-cache max-age public must-revalidate])
SPECIAL_KEYS = Set.new(%w[extras no-cache max-age public private must-revalidate])
def cache_control_segments
if cache_control = _cache_control
......
......@@ -412,6 +412,13 @@ def before_committed
end
def before_sending
# Normally we've already committed by now, but it's possible
# (e.g., if the controller action tries to read back its own
# response) to get here before that. In that case, we must force
# an "early" commit: we're about to freeze the headers, so this is
# our last chance.
commit! unless committed?
headers.freeze
request.commit_cookie_jar! unless committed?
end
......
......@@ -37,6 +37,27 @@ def test_write_after_close
assert_equal "closed stream", e.message
end
def test_read_body_during_action
@response.body = "Hello, World!"
# even though there's no explicitly set content-type,
assert_equal nil, @response.content_type
# after the action reads back @response.body,
assert_equal "Hello, World!", @response.body
# the response can be built.
status, headers, body = @response.to_a
assert_equal 200, status
assert_equal({
"Content-Type" => "text/html; charset=utf-8"
}, headers)
parts = []
body.each { |part| parts << part }
assert_equal ["Hello, World!"], parts
end
def test_response_body_encoding
body = ["hello".encode(Encoding::UTF_8)]
response = ActionDispatch::Response.new 200, {}, body
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册