Ответ 1
Ответ имеет Transfer-Encoding: chunked
. Здесь Content-Length
неприменимо, поскольку содержимое отправляется в одной или нескольких частях (кусках) внутри тела ответа с маркером, указывающим длину байта каждого отдельного фрагмента. http://en.wikipedia.org/wiki/Chunked_transfer_encoding
Node.js по умолчанию - Transfer-Encoding: chunked
. Однако это отключается установкой заголовка Content-Length
в собственном HTTP-ответе. Документация HTTP-модуля говорит:
Отправка заголовка "Content-length" приведет к отключению кодированной по умолчанию кодировки.
Идя в заголовке Content-Encoding:gzip
в вашем ответе, вы, вероятно, включили промежуточное программное обеспечение connect.compress
. Средство connect.compress
удаляет заголовок Content-Length
.
В любом случае, если вы сами генерируете gzipped-контент, заголовок Content-Length
, который вы создаете, наверняка будет неуместным для окончательного (gzipped) тела ответа. К счастью, промежуточное программное обеспечение для связи заботится об этом для вас.
При использовании Express или Connect вы не должны предполагать, что вещи, которые вы "отправляете" с объектом res, фактически отправляются клиенту. Там промежуточное ПО между ними. Все промежуточное ПО имеет возможность изменить практически все, что касается ответа, включая изменение тела ответа и добавление, удаление и изменение заголовков. То же самое касается запроса.
См. также следующие вопросы: