Длина Содержимого Node Express

Я использую node.js и express в небольшом проекте. Я установил заголовок ответа, как удар:

res.set({'Content-Type':'text/plain;charset=utf-8',    
'Content-Length': Buffer.byteLength(data, 'utf-8')});       

Я могу использовать console.log длина данных печати 317.

но на консоли браузера я просто получаю следующее:

соединение: keep-alive
Контент-кодирования:с помощью gzip
Тип содержимого: text / plain;charset=utf-8
Дата:СБ, 01 июн 2013 08:21: 59 GMT
Передача-кодирование: chunked
Vary: Accept-Encoding
X-Powered-By: Express

Итак, почему контент-длина исчез?

1 ответов


ответ Transfer-Encoding: chunked. Вот!--1--> неприменимо, поскольку содержимое отправляется в одной или нескольких частях (кусках) внутри тела ответа, с маркером, указывающим длину байта каждого отдельного куска. http://en.wikipedia.org/wiki/Chunked_transfer_encoding

узел.с JS по умолчанию:Transfer-Encoding: chunked. Однако это отключено, установив Content-Length заголовок собственного объекта ответа http. документация HTTP модуля говорит:

отправка заголовка "Content-length"отключит кодировку по умолчанию.

идти Content-Encoding:gzip заголовок в вашем ответе, вы, вероятно, включили connect.compress промежуточное. The connect.compress middleware удаляет Content-Length заголовок.

в любом случае, если вы не генерируете gzipped контент самостоятельно,Content-Length заголовок, который вы генерируете, наверняка не подходит для окончательного (gzipped) тела ответа. К счастью, промежуточное ПО connect позаботится об этом для вас.

при использовании Express или Connect вы не должны предполагать, что вещи, которые вы "отправляете" с объектом res, действительно отправляются клиенту. Между ними промежуточное ПО. Все промежуточное программное обеспечение имеет возможность изменять почти все о ответе, включая изменение тела ответа и добавление, удаление и изменение заголовков. То же самое касается запроса.

Смотрите также вопросы: