Обслуживание ответов HTTP / 1.0 с Node.JS (неизвестная длина контента, кодировка передачи по частям)
Я обслуживаю ресурс неизвестной длины через Node.JS. Из-за этогоContent-Length
заголовок не может быть установлен. Для HTTP 1.1 требуется, чтобы кодирование по частям использовалось для ресурсов такого рода. Node.JS знает об этом и отправляет мои данные с частичной кодировкой передачи самостоятельно со следующими заголовками:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Connection: close
...
Это хорошо для хороших клиентов.However, I have some not-so-well behaved clients (namely Android 2.2 and earlier) that I must support. Эти клиенты не поддерживают правильное кодирование передачи по частям.
Fix Attempt #1Моя первоначальная мысль была установлена кодировкаnone
вот так:
response.writeHead(200, {'Transfer-Encoding': 'none'});
Это отключает автоматическое частичное кодирование Node.JS и поддерживает совместимость сmost клиентов. Однако теперь я сломал клиенты Android 2.3+, поскольку они просто кашляют и задыхаются, когда видят такой поддельный заголовок кодировки передачи.
Fix Attempt #2 (where I need help)Когда я делаю запросы сHTTP/1.0
сервер правильно возвращает ответ без чанкованной кодировки:
HTTP/1.1 200 OK
Connection: close
...
Это решает мою проблему и позволяет мне обслуживать поток, который работает для всех моих проблемных клиентов. Мне не нужно отправлять фиктивный заголовок дляTransfer-Encoding
и мне все еще не нужно указывать, как долго контент.
How can I force Node.JS's HTTP server to always serve in HTTP/1.0 mode?