Длина Содержимого 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, действительно отправляются клиенту. Между ними промежуточное ПО. Все промежуточное программное обеспечение имеет возможность изменять почти все о ответе, включая изменение тела ответа и добавление, удаление и изменение заголовков. То же самое касается запроса.
Смотрите также вопросы: