19 февраля 2002 г. в 15:50 Вы писали:
>>
>> Т.е. проблема на лицо. Может быть, конечно, правильным поведением
>> mod_accel было бы не анализировать Cache-Control, раз он по HTTP/1.0
>> ходит, но мне кажется, что само наличие в ответе сервера заголовков
>> Expires и Cache-Control, противоречащих друг другу, не есть хорошо.
AT> Я согласен по "букве" - тем более что max-age имеет больший приоритет.
AT> По духу - установка mod_charset-ом Expires на backend - вещь совершенно
AT> ненужная и даже вредная, всеми перекодировками должен frontend заниматься.
С тем, что frontend должен заниматься перекодировкой, я тоже согласен
по букве и по духу, но жизнь такова, что приходится ставить все с ног
на голову.
У нас на backend-е что-то живет в koi8-r, что-то в windows-1251,
причем по массе разных причин приводить все в единый стройный порядок
сложно и дорого. Поэтому принята была такая схема: на backend-е стоит
mod_charset который пытается все и всегда отдавать только в
windows-1251 и точка. Frontend собран без mod_charset-а. Тех
клиентов, которые не хотят понимать windows, мы с сожалением,
игнорируем.
Но грабли обнаружились в таком вот месте. Пришел хитрый клиент,
который сказал "Accept-Charset: koi8-r". Если на frontend-е
закеширован ответ (в windows-1251), то он его клиенту и отдаст. Это
нормально, так и задумано. Но если в кеше ответа нет, frontend
получит от backend-а ответ в koi8-r, закеширует его, и дальше уже всем
начет отдавать ответ в koi8-r. А это уже катастрофа.
Как бороться? Вот варианты, которые приходят в голову:
1. Запретить backend-у отдавать в кодировке, отличной от windows-1251,
не взирая ни на что. Хорошо, но как? Насколько я понимаю,
mod_charset всегда отдаст в koi8-r ежели его о том явно попросят.
2. Запретить frontend-у кешировать ответы, полученные в кодировке,
отличной от windows-1251. Это само собой бы получилось, если бы
заголовок Cache-Control выставлялся бы вместе Expires в соотвествующих
случаях.
Все, больше ничего в голову не пришло пока. Буду благодарен за любые
здравые идеи.
С уважением,
Сергей Герштейн
=============================================================================
= Apache-Rus@xxxxxxxxxxxxx mailing list =
Mail "unsubscribe apache-rus" to majordomo@xxxxxxxxxxxxx if you want to quit.
= Archive avaliable at http://apache.lexa.ru/mail-archive =
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.