Модуль mod_deflate удаляет ETag и Content-Length

Вопросы связанные с работой Apache

Модераторы: Art.i, vasya

Модуль mod_deflate удаляет ETag и Content-Length

Сообщение ijkl » Вс сен 04, 2016 8:25 pm

На сервере Apache включен mod_deflate.

1. Когда с помощью php отправляется html страница и посылается заголовок ETag -- сервер отдает сжатый gzip файл, но без ETag. При этом Content-Length правильный и mod_deflate добавляет Vary: Accept-Encoding.

2. Когда с помощью php отправляется сформированный на лету файл прикладного типа и посылается заголовок Content-Length, сервер отдает сжатый gzip файл, но без Content-Length. При этом mod_deflate добавляет Transfer-Encoding: chunked и Vary: Accept-Encoding. Это при том, что статичные файлы отдаются с правильным Content-Length.

3. Когда с помощью php отправляется сформированный на лету файл прикладного типа частями (в ответ на запрос с Range) и посылается заголовок 206 Partial content, а также Content-Range и Content-Length -- сервер вообще ничего не сжимает. Это при том, что запрошенные части статичного контента отправляются сжатыми, с правильными Content-Range и Content-Length.

Без mod_deflate все работает корректно.

Последняя проблема не критичная, вряд ли часто будут запрашивать контент частями. Но вот первые две проблемы серьезные. Можно ли или их решить или придется отключать mod_deflate для этих типов контента?
Последний раз редактировалось ijkl Вс сен 04, 2016 9:17 pm, всего редактировалось 1 раз.
ijkl
 
Сообщений: 215
Зарегистрирован: Чт окт 03, 2013 5:42 pm

Re: Модуль mod_deflate удаляет ETag и Content-Length

Сообщение Mikanoshi » Вс сен 04, 2016 9:11 pm

Сгенерировать заголовок ETag самому в PHP. Но не проще поставить Nginx перед апачем, а в апаче всё отключить?)
Content-Length не должен быть в заголовке, если Transfer-Encoding: chunked, это по спецификации. А вот если в PHP скрипте задать верный Content-Length, то апач по-идее не должен использовать chunked.
Можно ещё форсировать HTTP/1.0, что-то типа этого:
Код: выделить все
SetEnv downgrade-1.0 1
SetEnv force-response-1.0 1
Mikanoshi
 
Сообщений: 205
Зарегистрирован: Сб май 02, 2009 2:03 pm

Re: Модуль mod_deflate удаляет ETag и Content-Length

Сообщение ijkl » Вс сен 04, 2016 9:22 pm

Mikanoshi писал(а):Content-Length не должен быть в заголовке, если Transfer-Encoding: chunked
chunked добавляет mod_deflate. Мне не нужен chunked. Нужно Transfer-Encoding: gzip и Content-Length, как это происходит с другими статичными файлами, а также с text/html, который отдает php. Не понятно, почему, если php отдает text/html, но все нормально, а если файл, то chunked.

Mikanoshi писал(а):А вот если в PHP скрипте задать верный Content-Length, то апач по-идее не должен использовать chunked.
А если Content-Encoding: gzip, то Content-Length показывает размер сжатого файла?
Файл имеет размер 5715. Это же значение мой скрипт формирует и отправляет в Content-Length. Но я попробовал сохранить файл и запросить с сервера как статический. Сервер его сжал и в Content-Length: 1634.
ijkl
 
Сообщений: 215
Зарегистрирован: Чт окт 03, 2013 5:42 pm

Re: Модуль mod_deflate удаляет ETag и Content-Length

Сообщение Mikanoshi » Пн сен 05, 2016 12:07 pm

Размер должен быть сжатого, наверно и сжимать тогда самому надо)
А если просто увеличить буфер? Chunked включается если в него не влезает сжатый файл.
http://httpd.apache.org/docs/2.2/mod/mo ... buffersize
Mikanoshi
 
Сообщений: 205
Зарегистрирован: Сб май 02, 2009 2:03 pm

Re: Модуль mod_deflate удаляет ETag и Content-Length

Сообщение ijkl » Ср сен 14, 2016 9:57 pm

Проблема была в том, что php-скрипте буфер принудительно отправлялся до завершения скрипта. Но теперь снова проблема возникла, когда размер вывода слишком большой.

Mikanoshi писал(а):Размер должен быть сжатого, наверно и сжимать тогда самому надо)
А если просто увеличить буфер? Chunked включается если в него не влезает сжатый файл.
http://httpd.apache.org/docs/2.2/mod/mo ... buffersize

DeflateBufferSize 8096 Сколько можно ставить? С единицей измерения поймет 1M?
ijkl
 
Сообщений: 215
Зарегистрирован: Чт окт 03, 2013 5:42 pm

Re: Модуль mod_deflate удаляет ETag и Content-Length

Сообщение Mikanoshi » Ср сен 14, 2016 10:23 pm

Написано в байтах надо. Ставить сколько нужно, чтобы отправляемый файл влез) Файлы же не по ГБ?
Mikanoshi
 
Сообщений: 205
Зарегистрирован: Сб май 02, 2009 2:03 pm


Вернуться в Apache

Кто сейчас на форуме

Сейчас этот форум просматривают: Yahoo [Bot] и гости: 1