mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #33134 from dasch/dasch/extra-cache-controls
Add support for more HTTP cache controls
This commit is contained in:
commit
2be5ef6a1d
3 changed files with 28 additions and 2 deletions
|
@ -235,7 +235,9 @@ module ActionController
|
|||
response.cache_control.merge!(
|
||||
max_age: seconds,
|
||||
public: options.delete(:public),
|
||||
must_revalidate: options.delete(:must_revalidate)
|
||||
must_revalidate: options.delete(:must_revalidate),
|
||||
stale_while_revalidate: options.delete(:stale_while_revalidate),
|
||||
stale_if_error: options.delete(:stale_if_error),
|
||||
)
|
||||
options.delete(:private)
|
||||
|
||||
|
|
|
@ -202,13 +202,17 @@ module ActionDispatch
|
|||
self._cache_control = _cache_control + ", #{control[:extras].join(', ')}"
|
||||
end
|
||||
else
|
||||
extras = control[:extras]
|
||||
extras = control[:extras]
|
||||
max_age = control[:max_age]
|
||||
stale_while_revalidate = control[:stale_while_revalidate]
|
||||
stale_if_error = control[:stale_if_error]
|
||||
|
||||
options = []
|
||||
options << "max-age=#{max_age.to_i}" if max_age
|
||||
options << (control[:public] ? PUBLIC : PRIVATE)
|
||||
options << MUST_REVALIDATE if control[:must_revalidate]
|
||||
options << "stale-while-revalidate=#{stale_while_revalidate.to_i}" if stale_while_revalidate
|
||||
options << "stale-if-error=#{stale_if_error.to_i}" if stale_if_error
|
||||
options.concat(extras) if extras
|
||||
|
||||
self._cache_control = options.join(", ")
|
||||
|
|
|
@ -141,6 +141,16 @@ class TestController < ActionController::Base
|
|||
render action: "hello_world"
|
||||
end
|
||||
|
||||
def conditional_hello_with_expires_in_with_stale_while_revalidate
|
||||
expires_in 1.minute, public: true, stale_while_revalidate: 5.minutes
|
||||
render action: "hello_world"
|
||||
end
|
||||
|
||||
def conditional_hello_with_expires_in_with_stale_if_error
|
||||
expires_in 1.minute, public: true, stale_if_error: 5.minutes
|
||||
render action: "hello_world"
|
||||
end
|
||||
|
||||
def conditional_hello_with_expires_in_with_public_with_more_keys
|
||||
expires_in 1.minute, :public => true, "s-maxage" => 5.hours
|
||||
render action: "hello_world"
|
||||
|
@ -358,6 +368,16 @@ class ExpiresInRenderTest < ActionController::TestCase
|
|||
assert_equal "max-age=60, public, must-revalidate", @response.headers["Cache-Control"]
|
||||
end
|
||||
|
||||
def test_expires_in_header_with_stale_while_revalidate
|
||||
get :conditional_hello_with_expires_in_with_stale_while_revalidate
|
||||
assert_equal "max-age=60, public, stale-while-revalidate=300", @response.headers["Cache-Control"]
|
||||
end
|
||||
|
||||
def test_expires_in_header_with_stale_if_error
|
||||
get :conditional_hello_with_expires_in_with_stale_if_error
|
||||
assert_equal "max-age=60, public, stale-if-error=300", @response.headers["Cache-Control"]
|
||||
end
|
||||
|
||||
def test_expires_in_header_with_additional_headers
|
||||
get :conditional_hello_with_expires_in_with_public_with_more_keys
|
||||
assert_equal "max-age=60, public, s-maxage=18000", @response.headers["Cache-Control"]
|
||||
|
|
Loading…
Reference in a new issue