Каков риск наличия HTTP-заголовка «Cache-Control: public»? - PullRequest
39 голосов
/ 27 июля 2010

Заголовок Cache-Control HTTP / 1.1 может указывать максимальный возраст, а также то, может ли содержимое кэша быть общедоступным или закрытым, указывая, может ли промежуточный кэш кэшировать содержимое.

Например, Ruby on Rails expires_in() по умолчанию использует Cache-Control: private

Какой риск сделать его публичным? Если это общедоступный, какие дополнительные места могут кэшировать контент - будет ли это прокси-сервер, например?

Что если веб-сайт похож на Amazon.com, но пользователь является анонимным, то, вероятно, проблемы с конфиденциальностью не так много? Что, если пользователь вошел в систему, может возникнуть проблема конфиденциальности, потому что данные проходят через места и данные видны. Если это местоположение хочет быть «плохим», ему все равно не нужно заботиться о Cache-Control: private.

Что делать, если это веб-сайт, на котором пользователь может войти в систему, но веб-сайт ищет только полезные для здоровья продукты, такие как рыбий жир и витамины, и так далее. В этом случае обеспечивается еще меньшая конфиденциальность, поскольку в отличие от Amazon.com, где существует гораздо больше разнообразных продуктов, таких как книги, для которых пользователь может действительно больше заботиться о проблеме конфиденциальности.

Сказав это, в чем заключается дополнительное преимущество обладания Cache-Control: public?

Ответы [ 2 ]

48 голосов
/ 27 июля 2010

Проблема с Cache-Control: Public заключается в том, что ответ может быть кэширован и отображен другому пользователю.Это проблема, если у вас есть приложение, прошедшее проверку подлинности, которое отображает личные данные.В общем, вы должны использовать public только для статических страниц или страниц, которые возвращают одни и те же данные, независимо от того, какой пользователь делает запрос.

28 голосов
/ 27 июля 2010

Я также нашел следующую спецификацию:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1

public

Указывает, что ответ МОЖЕТ быть кэширован любымкэшировать, даже если он обычно не кэшируется или кэшируется только в нераспространенном кэше.(См. Также Авторизация, раздел 14.8, для получения дополнительной информации.)

private

Указывает, что все или часть ответного сообщения предназначены для одного пользователя и НЕ ДОЛЖНЫкэшироваться общим кешем.Это позволяет исходному серверу утверждать, что указанные части ответа предназначены только для одного пользователя и не являются действительным ответом на запросы других пользователей.Частный (не общий) кеш МОЖЕТ кешировать ответ.Примечание. Такое использование слова private только контролирует, где может кэшироваться ответ, и не может обеспечить конфиденциальность содержимого сообщения.

Так что, похоже, речь идет скорее о «разделяемом кэше», а непромежуточный кеш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...