Убедите Firefox отправить заголовок If-Modified-Since по HTTPS

Как я могу убедить Firefox (3.0.1, если это важно) отправить заголовок If-Modified-Since в запросе HTTPS? Он отправляет заголовок, если в запросе используется простой HTTP, и мой сервер покорно его соблюдает. Но когда я запрашиваю тот же ресурс с того же сервера, используя вместо этого HTTPS (т. Е. Просто меняя http: // в URL-адресе на https: //), тогда Firefox вообще не отправляет заголовок If-Modified-Since. Это поведение предусмотрено спецификацией SSL или чем-то еще?

Вот несколько примеров пар запросов / ответов HTTP и HTTPS, полученных с помощью расширения Firefox Live HTTP Headers, с некоторыми отличиями, выделенными жирным шрифтом:

HTTP-запрос / ответ:

http://myserver.com:30000/scripts/site.js

ПОЛУЧИТЬ /scripts/site.js HTTP / 1.1
Хост: myserver.com:30000
Пользовательский агент: Mozilla / 5.0 (...) Gecko / 2008070206 Firefox / 3.0.1
Принять: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8
Accept-Language: en-us, en; q = 0,5
Принятие кодировки: gzip, deflate
Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7
Живучесть: 300
Подключение: keep-alive
If-Modified-Since: Вт, 19 августа 2008 г., 15:57:30 GMT
Если-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
Etag: "a0501d1-300a-454d22526ae80" -gzip

Запрос / ответ HTTPS:

https://myserver.com:30001/scripts/site.js

ПОЛУЧИТЬ /scripts/site.js HTTP / 1.1
Хост: myserver.com:30001
Пользовательский агент: Mozilla / 5.0 (...) Gecko / 2008070206 Firefox / 3.0.1
Принять: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8
Accept-Language: en-us, en; q = 0,5
Принятие кодировки: gzip, deflate
Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7
Живучесть: 300
Подключение: keep-alive

HTTP / 1.x 200 ОК
Дата: Вт, 19 августа 2008 г., 16:00:14 GMT
Сервер: Apache / 2.2.8 (Unix) mod_ssl / 2.2.8 OpenSSL / 0.9.8
Последнее изменение: Вт, 19 августа 2008 г., 15:57:30 GMT
Etag: "a0501d1-300a-454d22526ae80" -gzip
Accept-Ranges: байты
Кодирование содержимого: gzip
Длина содержимого: 3766
Keep-Alive: тайм-аут = 5, максимум = 100
Подключение: Keep-Alive
Тип содержимого: текст / javascript

ОБНОВЛЕНИЕ: установка browser.cache.disk_cache_ssl в true сработала (что странно, потому что, как указывает Николай, все еще есть кеш памяти). Также сработало добавление к ответу заголовка «Cache-control: public». Спасибо!

Ответов (2)

Решение

Запросы 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 не имеет смысла. Отсутствие кеширования - это мера безопасности.