Servindo respostas HTTP / 1.0 com Node.JS (comprimento de conteúdo desconhecido, codificação de transferência em partes)
Eu estou servindo um recurso de comprimento desconhecido via Node.JS. Por causa disso, oContent-Length
cabeçalho não pode ser definido. Para o HTTP 1.1, é necessário que a codificação em partes seja usada para recursos dessa natureza. O Node.JS sabe disso e envia meus dados com a codificação de transferência em partes por conta própria, com os seguintes cabeçalhos:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Connection: close
...
Tudo isso é bom e bom para clientes bem comportados.No entanto, eu tenho alguns clientes não tão bem comportados (ou seja, Android 2.2 e anteriores) que devo apoiar. Esses clientes não suportam a codificação de transferência em partes corretamente.
Corrigir Tentativa # 1Meu pensamento inicial foi definir a codificação paranone
igual a:
response.writeHead(200, {'Transfer-Encoding': 'none'});
Isso desativa a codificação em partes automática do Node.JS e mantém a compatibilidade coma maioria clientes. No entanto, agora eu quebrei clientes Android 2.3 +, como eles simplesmente tossem e sufocam quando vêem um cabeçalho de codificação de transferência tão falsa.
Corrigir tentativa # 2 (onde preciso de ajuda)Quando faço pedidos comHTTP/1.0
, o servidor retorna corretamente a resposta sem codificação em partes:
HTTP/1.1 200 OK
Connection: close
...
Isso resolve meu problema e permite que eu sirva um fluxo que funcione para todos os meus clientes problemáticos. Eu não tenho que mandar um cabeçalho falso paraTransfer-Encoding
e ainda não preciso especificar quanto tempo o conteúdo é.
Como posso forçar o servidor HTTP do Node.JS a sempre servir no modo HTTP / 1.0?