Убедите 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, с некоторыми отличиями в жирном шрифте:

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» к ответу также работало. Спасибо!

19.08.2008 16:07:50
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 теперь кэшируется.

14
1.02.2011 08:33:24
В основном верно, но в текущих версиях FF, HTTPS Ответы будут кэшировать IF кэш-контроль: общественность отправляется.
EricLaw 26.06.2009 04:46:40
Да, именно поэтому я предложил сначала проверить правильность моего чтения кода, переключив pref и тестирование, а затем заставив браузер кэшировать страницы, обслуживаемые HTTP, отправив заголовок.
Nickolay 1.07.2009 20:04:24

HTTPS-запросы не кэшируются, поэтому отправка If-Modified-Since не имеет никакого смысла. Не кэширование является мерой безопасности.

2
19.08.2008 16:12:00
Они могут быть кэшированы, если сервер отправляет Cache-Control: public, max-age = XXX
hughw 9.12.2012 15:19:03