Кэширование ресурса по протоколам HTTP и HTTPS
Есть ли способ указать, что ресурс должен кэшироваться при доступе как по HTTP, так и по HTTPS? У нас есть много статического контента, который первоначально подается по протоколу HTTP, а затем повторно подается по протоколу SSL, когда пользователь пытается зарегистрироваться или войти в систему, и было бы неплохо кэшировать его.
2 answers
Нет, браузеры будут рассматривать URL-адреса HTTP и HTTPS как совершенно разные, даже если единственным фактическим отличием является наличие s
.
Если бы они этого не сделали, это создало бы серьезную брешь в системе безопасности. Подумайте, что произойдет, если, скажем, злоумышленнику удастся взломать файл JS, загруженный по небезопасному HTTP, и браузер позже повторно запустит тот же код JS из своего кэша на защищенной странице.
Единственный способ повторно использовать одни и те же статические ресурсы как в безопасных, так и в небезопасных страницы должны загружаться с одних и тех же URL-адресов. Здесь у вас есть в основном два варианта:
Используйте HTTPS для своих статических ресурсов, даже если главная страница загружается по HTTP. Это будет работать и безопасно, но использование HTTPS потребует небольших затрат на процессор и не позволит общим прокси-серверам кэшировать ресурсы. Однако браузер пользователя все равно будет кэшировать их, и по-прежнему можно использовать обратный прокси или CDN для обслуживания ресурсов, пока они могут действовать как доверенные конечные точки SSL.
Используйте HTTP для своих статических ресурсов, даже если главная страница загружается по протоколу HTTPS. Это может также работать в некоторых браузерах, но это небезопасно . Даже браузеры, в которых это работает, обычно предупреждают пользователя о наличии небезопасного контента или просто рассматривают всю страницу как небезопасную. Например, IE8 отобразит предупреждение "смешанный контент", в то время как IE9 просто не будет загружать небезопасные ресурсы (за исключением изображений).
Конечно, у вас также есть третий вариант: просто используйте HTTPS для всех ваших страниц. Это может быть более практично, чем вы думаете, особенно если значительная часть вашего трафика уже использует HTTPS.
Я не нашел ничего, что конкретно указывало бы, как браузеры должны обрабатывать совместное использование кэшированного содержимого https и http, и я также нашел противоречивую информацию в Интернете.
Например: Я очистил свой кэш в Firefox, посетил http://www.google.com , просмотрел мой дисковый кэш (введите about:cache
в строке URL-адреса), а затем посетил https://www.google.com .
Несмотря на то, что и http, и https кэшировали содержимое, сайт https не извлекал кэшированные ресурсы http. В любом случае, вот несколько статей, которые могут быть полезны:
- http://www.mnot.net/cache_docs/
- http://www.web-caching.com/welcome.html
- http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13
Надеюсь, это поможет!