Permalink
Browse files

Allow people to set their own etags, if they want more control over t…

…he process (closes #7580) []

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6163 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent c9260c5 commit 109d4ac95443421da93bbad1d02e949429362221 @dhh dhh committed Feb 18, 2007
Showing with 9 additions and 2 deletions.
  1. +2 −2 actionpack/lib/action_controller/base.rb
  2. +7 −0 actionpack/test/controller/render_test.rb
@@ -653,7 +653,7 @@ def view_paths
#
# Rendering will automatically insert the etag header on 200 OK responses. The etag is calculated using MD5 of the
# response body. If a request comes in that has a matching etag, the response will be changed to a 304 Not Modified
- # and the response body will be set to an empty string.
+ # and the response body will be set to an empty string. No etag header will be inserted if it's already set.
#
# === Rendering a template
#
@@ -879,7 +879,7 @@ def render_text(text = nil, status = nil, append_response = false) #:nodoc:
if text.is_a?(String)
if response.headers['Status'][0..2] == '200' && !response.body.empty?
- response.headers['Etag'] = %("#{Digest::MD5.hexdigest(text)}")
+ response.headers['Etag'] ||= %("#{Digest::MD5.hexdigest(text)}")
if request.headers['HTTP_IF_NONE_MATCH'] == response.headers['Etag']
response.headers['Status'] = "304 Not Modified"
@@ -328,6 +328,13 @@ def render_with_404_shouldnt_have_etag
assert_nil @response.headers['Etag']
end
+ def test_etag_should_not_be_changed_when_already_set
+ expected_etag = etag_for("hello somewhere else")
+ @response.headers["Etag"] = expected_etag
+ get :render_hello_world_from_variable
+ assert_equal expected_etag, @response.headers['Etag']
+ end
+
protected
def assert_deprecated_render(&block)
assert_deprecated(/render/, &block)

0 comments on commit 109d4ac

Please sign in to comment.