Как может я отключать Кодирование Передачи: разделенный на блоки в Apache с ответами HTTP/1.1

Я подвергаю сомнению, почему любой купил бы OEM Windows Server OEM или Microsoft Office. При замене оборудования, Вы вынуждены "повторно купить" те лицензии. "Сбережения" идущей OEM Открывают, Business, кажется, не стоит того вообще, когда Вы включаете в этот расход "перепокупки".

На основе моего опыта с большинством Клиентов, использующих 3-летний ПК / заменяющий цикл сервера, можно обычно получать использование Открытой Лицензии на ведение коммерческой деятельности "набор" для Microsoft Office на двух ПК (более чем 3 - 6 лет). Аналогично, у меня есть Клиенты сегодня, которых, имел, они купили Открытые Лицензии на ведение коммерческой деятельности для своего Windows Server ОС, когда они купили серверы в 2003, будет выполнять ту же самую лицензию Windows Server 2003 на сервере, который заменил это orignal машина (в 2006) и в некоторых случаях на машине, которая заменяет машину с 2006 эрами сегодня (для тех Клиентов, которым не нужно / требуют Windows Server 2008 все же).

5
задан 28 June 2010 в 16:41
4 ответа

Если Вы предварительно указываете Довольную длину, Apache не должен будет использовать разделенный на блоки. Без Довольной длины Apache не имеет никакой опции, кроме как использовать его.

Быть ясным: HTTP/1.0 управляет им, потому что Apache читает во всем ответе прежде, чем отправить его вперед, таким образом, это знает, насколько большой это будет. Это весело неэффективно, и медленно, и AFAIK, там не способ включить эту логику для запросов HTTP/1.1, кроме путем принуждения их к HTTP/1.0 (который Вы действительно, действительно не хотите делать, не так ли? Если Вы делаете, переменная среды для установки является "снижением 1.0"),

9
ответ дан 3 December 2019 в 00:58

Вышеупомянутый ответ является неправильным.

Если запросом является HTTP/1.0, Apache никогда не буферизует ответ прежде, чем отправить его (с заголовком Довольной Длины). Конечно, Apache мог сделать это, но существует более изящное решение, которое использует Apache: это отвечает "Соединением: закройте" заголовок и соединение завершений, как только это отправляет все данные.

Согласно спецификации HTTP, присутствию "Соединения: закройте" средства заголовка клиентские потребности читать, пока соединение не будет закрыто.

Решение Вашей проблемы состоит в том, чтобы вызвать обработку Apache запрос как HTTP/1.0 путем установки упомянутого снижения 1,0 переменная среды. Разделенное на блоки Кодирование Передачи является функцией HTTP/1.1, и Apache не будет использовать его для запроса HTTP/1.0.

Например, вот то, как Вы могли отключить разделенные на блоки ответы для php файлов:

++++++++++++
apache.conf
++++++++++++

<Files *.php>
    SetEnv downgrade-1.0
</Files>
7
ответ дан 3 December 2019 в 00:58

Клиент Apache попытается определить размер отправляемого тела. Предварительно 0 указание "Content-Length" вызовет ошибку, если вы не используете специальные перехватчики.

Он проверяет объект, который он будет отправлять, чтобы определить, разбит ли он на части или размер тела (content-length) <0 и если одно из них истинно, то используется заголовок «Transfer-Encoding = chunked».Если объект не предпочитает разбиение на фрагменты и обнаружена длина содержимого> -1, то он использует заголовок Content-Length.

Обычно, если источником тела является часть тела mime, он будет использовать «Transfer-Encoding», потому что вызов метода size () возвращает -1, поэтому преобразование части тела mime в массив байтов будет работать, поскольку он вернет количество байтов в массиве.

0
ответ дан 3 December 2019 в 00:58

У меня были похожие проблемы. Я решил проблему, удалив заголовок Transfer-encoding из ответа прямо в приложении.

0
ответ дан 20 July 2020 в 03:46

Теги

Похожие вопросы