Почему IIS не поддерживает кодирование передачи по частям? - PullRequest
7 голосов
/ 03 декабря 2008

Я устанавливаю HTTP-соединение с веб-сервером IIS и отправляю запрос POST с данными, закодированными с помощью Transfer-Encoding: chunked. Когда я это делаю, IIS просто закрывает соединение без сообщения об ошибке или кода состояния. Согласно спецификации HTTP 1.1 ,

Все приложения HTTP / 1.1 ДОЛЖНЫ быть в состоянии принимать и декодировать "фрагментированное" кодирование передачи

поэтому я не понимаю, почему он (а) не обрабатывает эту кодировку и (б) не возвращает код состояния. Если я изменю запрос на отправку Content-Length, а не Transfer-Encoding, запрос будет выполнен успешно, но это не всегда возможно.

Когда я пытаюсь сделать то же самое с Apache, я получаю статус «Требуется 411 длина» и сообщение «chunked Transfer-Encoding запрещено».

Почему эти серверы не поддерживают эту кодировку?

Ответы [ 5 ]

7 голосов
/ 30 июля 2009

Посмотрите на своего клиента.

И IIS, и Apache поддерживают запросы POST с использованием кодировки передачи по частям. Вы можете проверить это с помощью утилиты curl :

curl <upload-url> --form "upfile=@<local_file>" --header "Transfer-Encoding: chunked"

Убедитесь, что передача фрагментирована с помощью Wireshark

4 голосов
/ 04 декабря 2008

Насколько я понимаю, кодирование по частям можно использовать только в ответе HTTP. Тело фрагментированного запроса будет иметь свойство несовместимости с сервером 1.0, и в любом случае пользовательский агент не сможет знать, что сервер является сервером 1.0, пока он уже не отправил запрос.

Но я согласен, что из документации неясно.

2 голосов
/ 21 декабря 2011

Это идет в обе стороны. попробуйте загрузить изображение 2MB ++ в фотобакет и запишите его. их загрузчик загружен на свои серверы apache.

0 голосов
/ 30 июля 2015

Эта команда пришла мне на помощь!

C: \ Windows \ System32 \ Inetsrv \ Appcmd.exe set config -section: httpCompression
- [name = 'gzip']. staticCompressionLevel: 9 - [name = 'gzip']. dynamicCompressionLevel: 4

спас мой день ... надеюсь, это поможет кому-то вроде меня!

0 голосов
/ 04 декабря 2008

Мое единственное предположение, что они не реализовали это из соображений безопасности. В наивном решении было бы легко настроить DOS-атаку, запустив несколько фрагментов, которые никогда не заканчиваются. И комплексное решение, которое может объяснить атаку DOS, вероятно, не стоит усилий.

Конечно, я не могу говорить за Apache или IIS, вы можете напрямую связаться с командой Apache: http://httpd.apache.org/bug_report.html

Я согласен с MarkR, что я всегда думал, что кусочное кодирование может использоваться только в качестве ответа, но документация делает его звучащим так, будто оно может использоваться в запросе или ответе.

...