IIS7 отказывается загружать файл с фрагментированной кодировкой

У меня есть приложение Windows / Apache2 / PHP, которое получает файл с использованием кодирования фрагментов. Причина в том, что загруженный файл является динамическим, и его длина до передачи неизвестна. Это всегда отлично работало из коробки.

Теперь мне нужно перенести приложение на IIS7 / PHP. Проблема в том, что IIS не может получить файл с фрагментами: когда файл загружается, сервер просто не отвечает. Как мне решить эту проблему?

Обратите внимание, что в моем тесте я даже не использую PHP. У меня просто расширение .php, потому что IIS отклоняет POST в файле .htm (что имеет смысл).

Как предложил Рупелло в этом ответе , я провел тест с помощью cURL, чтобы убедиться, что мой клиент не сломан. cURL также не может получить ответ, хотя все работает нормально, если передача не разбита на фрагменты.

Я провел следующие тесты:

test.php:


  
    
  
  
    
File:

Эта команда не возвращает (застряла в ожидании ответа)

curl.exe http://serveur/test.php --form "upfile=@text.txt" 
   -H "Transfer-Encoding: chunked" -H "Expect:"

Примечание: -H «Ожидайте:» для подавить Expect 100-Continue , выданное curl. Результат тот же без этого заголовка, за исключением, конечно, дополнительной обработки. Отправлено:

POST http://serveur/test.php HTTP/1.1
User-Agent: curl/7.15.3 (i586-pc-mingw32msvc) libcurl/7.15.3 zlib/1.2.2
Host: serveur
Pragma: no-cache
Accept: */*
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: multipart/form-data; boundary=----------------------------310dbcc6761b

8c
------------------------------310dbcc6761b
Content-Disposition: form-data; name="upfile"; filename="text.txt"
Content-Type: text/plain


5
hello
30

------------------------------310dbcc6761b--

0

Проблема: Сервер ничего не возвращает. Сервер выглядит так, будто ждет. завиток не возвращается.

Та же команда без кодирования фрагментов работает, как ожидалось:

Отправлено:

POST http://serveur/test.php HTTP/1.1
User-Agent: curl/7.15.3 (i586-pc-mingw32msvc) libcurl/7.15.3 zlib/1.2.2
Host: serveur
Pragma: no-cache
Accept: */*
Connection: Keep-Alive
Content-Length: 193
Content-Type: multipart/form-data; boundary=----------------------------e2d761bc173a

------------------------------e2d761bc173a
Content-Disposition: form-data; name="upfile"; filename="text.txt"
Content-Type: text/plain

hello
------------------------------e2d761bc173a--

Сервер теперь отвечает правильно:

HTTP/1.1 200 OK
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-Powered-By: PHP/5.3.8
X-Powered-By: ASP.NET
Date: Mon, 21 Nov 2011 10:47:57 GMT
Content-Length: 272



  


  
File:

Тест на обычном сервере LAMP с теми же файлами и запросами работает нормально.

Итак, как мне включить кодирование фрагментов запроса в IIS?

Примечание: я пробовал связанный параметр ASP, но безрезультатно:

C:\...\inetsrv>appcmd.exe set config /section:asp /enableChunkedEncoding:True
Applied configuration changes to section "system.webServer/asp" for "MACHINE/
WEBROOT/APPHOST" at configuration commit path "MACHINE/WEBROOT/APPHOST"

5
задан Community 23 May 2017 в 12:33
поделиться