Указать 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, вытащенные с использованием расширения HTTP HTTP Headers, с некоторыми отличиями жирным шрифтом:
HTTP-запрос/ответ:
http://myserver.com:30000/scripts/site.js
GET /scripts/site.js HTTP/1.1
Host: myserver.com:30000
User-Agent: Mozilla/5.0 (...) Gecko/2008070206 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: Tue, 19 Aug 2008 15:57:30 GMT
If-None-Match: "a0501d1-300a-454d22526ae80"-gzip
Cache-Control: max-age=0
HTTP/1.x 304 Not Modified
Date: Tue, 19 Aug 2008 15:59:23 GMT
Server: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8
Connection: Keep-Alive
Keep-Alive: timeout=5, max=99
Etag: "a0501d1-300a-454d22526ae80"-gzip
Запрос/ответ HTTPS:
https://myserver.com:30001/scripts/site.js
GET /scripts/site.js HTTP/1.1
Host: myserver.com:30001
User-Agent: Mozilla/5.0 (...) Gecko/2008070206 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
HTTP/1.x 200 OK
Date: Tue, 19 Aug 2008 16:00:14 GMT
Server: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8
Last-Modified: Tue, 19 Aug 2008 15:57:30 GMT
Etag: "a0501d1-300a-454d22526ae80"-gzip
Accept-Ranges: bytes
Content-Encoding: gzip
Content-Length: 3766
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/javascript
UPDATE: настройка browser.cache.disk_cache_ssl
на true сделала трюк (что нечетно, потому что, как указывает Nickolay, все еще есть кеш памяти). Добавлен заголовок "Cache-control: public" для ответа. Спасибо!
Ответы
Ответ 1
Запросы HTTPS не кэшируются, поэтому отправка If-Modified-Since не имеет никакого смысла. Не кэширование - это меры предосторожности.
Не кэширование на диске является предостережением безопасности, но, похоже, оно действительно влияет на поведение If-Modified-Since (просматривая код).
Попробуйте настроить предпочтение Firefox (примерно: config) browser.cache.disk_cache_ssl до true. Если это поможет, попробуйте отправить Cache-Control: public в ответ.
ОБНОВЛЕНИЕ: Поведение Firefox было изменено для Gecko 2.0 (Firefox 4) - содержимое HTTPS теперь кэшируется.
Ответ 2
Запросы HTTPS не кэшируются, поэтому отправка If-Modified-Since не имеет никакого смысла. Не кэширование - это меры предосторожности.