Как я могу убедить Firefox (3.0.1, если это имеет значение) отправить заголовок If-Modified-Since в запросе HTTPS? Он отправляет заголовок, если запрос использует простой HTTP и мой сервер покорно его выполняет. Но когда я запрашиваю тот же ресурс с того же сервера, используя вместо этого HTTPS (т. Е. Просто меняя http: // в URL на https: //), тогда Firefox вообще не отправляет заголовок If-Modified-Since. Это поведение предписано спецификацией SSL или чем-то?
Вот несколько примеров пар запросов и ответов HTTP и HTTPS, полученных с использованием расширения Firefox заголовков Live HTTP, с некоторыми отличиями в жирном шрифте:
HTTP запрос / ответ:
http://myserver.com:30000/scripts/site.js GET /scripts/site.js HTTP / 1.1 Хост: myserver.com:30000 Пользователь-агент: Mozilla / 5.0 (...) Gecko / 2008070206 Firefox / 3.0.1 Принять: текст / html, приложение / xhtml + xml, приложение / xml; q = 0,9, * / *; q = 0,8 Accept-Language: en-us, en; q = 0,5 Accept-Encoding: gzip, выкачать Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7 Keep-Alive: 300 Подключение: keep-alive If-Modified-Since: вторник, 19 августа 2008 15:57:30 GMT If-None-Match: "a0501d1-300a-454d22526ae80" -gzip Cache-Control: max-age = 0 HTTP / 1.x 304 не изменен Дата: вторник, 19 августа 2008 15:59:23 GMT Сервер: Apache / 2.2.8 (Unix) mod_ssl / 2.2.8 OpenSSL / 0.9.8 Подключение: Keep-Alive Keep-Alive: тайм-аут = 5, максимум = 99 Этаг: "a0501d1-300a-454d22526ae80" -gzip
HTTPS запрос / ответ:
https://myserver.com:30001/scripts/site.js GET /scripts/site.js HTTP / 1.1 Хост: myserver.com:30001 Пользователь-агент: Mozilla / 5.0 (...) Gecko / 2008070206 Firefox / 3.0.1 Принять: текст / html, приложение / xhtml + xml, приложение / xml; q = 0,9, * / *; q = 0,8 Accept-Language: en-us, en; q = 0,5 Accept-Encoding: gzip, выкачать Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7 Keep-Alive: 300 Подключение: keep-alive HTTP / 1.x 200 ОК Дата: вторник, 19 августа 2008 г., 16:00:14 по Гринвичу Сервер: Apache / 2.2.8 (Unix) mod_ssl / 2.2.8 OpenSSL / 0.9.8 Дата последнего изменения: вт, 19 авг 2008 15:57:30 GMT Этаг: "a0501d1-300a-454d22526ae80" -gzip Accept-Ranges: байты Контент-кодировка: gzip Длина контента: 3766 Keep-Alive: тайм-аут = 5, максимум = 100 Подключение: Keep-Alive Тип контента: текст / JavaScript
ОБНОВЛЕНИЕ: Установка browser.cache.disk_cache_ssl
в true сделала свое дело (что странно, потому что, как указывает Николай, все еще есть кэш памяти). Добавление заголовка «Cache-control: public» к ответу также работало. Спасибо!
HTTPS-запросы не кэшируются, поэтому отправка If-Modified-Since не имеет никакого смысла. Не кэширование является мерой безопасности.
Отсутствие кэширования на диске является предварительным предупреждением безопасности, но, похоже, оно действительно влияет на поведение If-Modified-Since (взгляд на код).
Попробуйте установить для параметра Firefox (в файле about: config) browser.cache.disk_cache_ssl значение true . Если это поможет, попробуйте отправить заголовок Cache-Control: public в вашем ответе.
ОБНОВЛЕНИЕ: Поведение Firefox было изменено для Gecko 2.0 (Firefox 4) - содержимое HTTPS теперь кэшируется.
HTTPS-запросы не кэшируются, поэтому отправка If-Modified-Since не имеет никакого смысла. Не кэширование является мерой безопасности.