модуль ActionDispatch::Http::Cache::Response
Константы
- DATE
- DEFAULT_CACHE_CONTROL
- LAST_MODIFIED
- MUST_REVALIDATE
- НЕ_КЭШИРОВАТЬ
- НЕ_ХРАНИТЬ
- PRIVATE
- PUBLIC
- СПЕЦИАЛЬНЫЕ_КЛЮЧИ
Атрибуты
Открытые методы экземпляров
# File actionpack/lib/action_dispatch/http/cache.rb, line 68
def date
if date_header = get_header(DATE)
Time.httpdate(date_header)
end
end # File actionpack/lib/action_dispatch/http/cache.rb, line 78 def date=(utc_time) set_header DATE, utc_time.httpdate end
# File actionpack/lib/action_dispatch/http/cache.rb, line 74 def date? has_header? DATE end
# File actionpack/lib/action_dispatch/http/cache.rb, line 101 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.
Слабые ETag - это то, что нам почти всегда нужно, поэтому они являются значением по умолчанию. Обратитесь к strong_etag= для предоставления сильного ETag валидатора.
# File actionpack/lib/action_dispatch/http/cache.rb, line 113 def etag?; etag; end
# File actionpack/lib/action_dispatch/http/cache.rb, line 54
def last_modified
if last = get_header(LAST_MODIFIED)
Time.httpdate(last)
end
end # File actionpack/lib/action_dispatch/http/cache.rb, line 64 def last_modified=(utc_time) set_header LAST_MODIFIED, utc_time.httpdate end
# File actionpack/lib/action_dispatch/http/cache.rb, line 60 def last_modified? has_header? LAST_MODIFIED end
# File actionpack/lib/action_dispatch/http/cache.rb, line 109 def strong_etag=(strong_validators) set_header "ETag", generate_strong_etag(strong_validators) end
# File actionpack/lib/action_dispatch/http/cache.rb, line 121 def strong_etag? etag? && !weak_etag? end
Истина, если ETag установлен и это не слабый валидатор (не начинается с W/)
# File actionpack/lib/action_dispatch/http/cache.rb, line 105 def weak_etag=(weak_validators) set_header "ETag", generate_weak_etag(weak_validators) end
# File actionpack/lib/action_dispatch/http/cache.rb, line 116
def weak_etag?
etag? && etag.start_with?('W/"')
end Истина, если ETag установлен и это слабый валидатор (начинается с W/)
© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.