модуль ActionDispatch::Http::Cache::Response
Константы
- DATE
- DEFAULT_CACHE_CONTROL
- IMMUTABLE
- LAST_MODIFIED
- MUST_REVALIDATE
- MUST_UNDERSTAND
- NO_CACHE
- NO_STORE
- PRIVATE
- PUBLIC
- SPECIAL_KEYS
Атрибуты
Открытые методы экземпляра
# File actionpack/lib/action_dispatch/http/cache.rb, line 193
def date
if date_header = get_header(DATE)
Time.httpdate(date_header)
end
end # File actionpack/lib/action_dispatch/http/cache.rb, line 203 def date=(utc_time) set_header DATE, utc_time.httpdate end
# File actionpack/lib/action_dispatch/http/cache.rb, line 199 def date? has_header? DATE end
# File actionpack/lib/action_dispatch/http/cache.rb, line 225 def etag=(weak_validators) self.weak_etag = weak_validators end
Этот метод устанавливает для ответа слабый валидатор ETag, чтобы браузеры и прокси могли кэшировать ответ, используя ETag в качестве ключа. При последующих запросах заголовок If-None-Match устанавливается в значение кэшированного ETag. Если он совпадает с текущим ETag, можно вернуть ответ 304 Not Modified без тела, сообщив браузеру или прокси, что их кэш актуален. Это значительно сокращает время запросов и расход сетевой полосы пропускания.
Слабые ETag считаются семантически эквивалентными, но не идентичными побайтно. Это идеально подходит для кэширования HTML-страниц в браузере, когда нам не требуется точное совпадение, а важно лишь то, что видит пользователь.
Сильные ETag считаются идентичными побайтно. Они позволяют кэшу браузера или прокси поддерживать запросы Range, полезные для перелистывания PDF-файла или перемотки видео. Некоторые CDN поддерживают только сильные ETag и полностью игнорируют слабые.
Почти всегда нам нужны слабые ETag, поэтому они используются по умолчанию. См.
strong_etag=, чтобы задать сильный валидатор ETag.
# File actionpack/lib/action_dispatch/http/cache.rb, line 237 def etag?; etag; end
# File actionpack/lib/action_dispatch/http/cache.rb, line 179
def last_modified
if last = get_header(LAST_MODIFIED)
Time.httpdate(last)
end
end # File actionpack/lib/action_dispatch/http/cache.rb, line 189 def last_modified=(utc_time) set_header LAST_MODIFIED, utc_time.httpdate end
# File actionpack/lib/action_dispatch/http/cache.rb, line 185 def last_modified? has_header? LAST_MODIFIED end
# File actionpack/lib/action_dispatch/http/cache.rb, line 233 def strong_etag=(strong_validators) set_header "ETag", generate_strong_etag(strong_validators) end
# File actionpack/lib/action_dispatch/http/cache.rb, line 246 def strong_etag? etag? && !weak_etag? end
Истина, если задан ETag и он не является слабым валидатором (перед ним не стоит W/).
# File actionpack/lib/action_dispatch/http/cache.rb, line 229 def weak_etag=(weak_validators) set_header "ETag", generate_weak_etag(weak_validators) end
# File actionpack/lib/action_dispatch/http/cache.rb, line 240
def weak_etag?
etag? && etag.start_with?('W/"')
end Истина, если задан ETag и он является слабым валидатором (перед ним стоит W/).
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.