Pull to refresh

node.js бьет бинарные данные при работе по http из-за кодировки по умолчанию — лечим и ненавидим

Reading time2 min
Views4.2K
Короче, пишу свой прокси-сервер на node.js (это все равно пригодится, но и просто прокси свое применение имеет, мне давно тему спалили, интересно, живо ли это еще)

Прокси на основе методов типа .pipe() мне не подходит – мне надо полные данные через себя пропускать, а так они мимо пройдут. Мне надо скачать данные полностью, обработать и потом отправить.

Написал прокси на сокетах на основе примеров – бьет картинки (скачиваются данные другой длины, чем content-length, причем для маленьких картинок разница меньше, для больших больше)

Переписал на модуле http – все равно бьет, видимость проблемы та же.

Долго ***ся, нигде ничего нет про такую проблему…

Причина – что весь ввод-вывод и с сокетами, и с http – имеет указание кодировки, и даже если ты ее не указываешь (опциональный параметр), там внутри есть какая-то кодировка по умолчанию, и она по умолчанию что-то делает!

То есть, все картинки этой кодировкой обрабатываются как-то и портятся. И это отдельный вопрос, что за хрень – одна кодировка? Тогда должно быть две – кодировка до и после.

Как лечить проблему с кодировкой node.js


Ставим кодировку ‘binary’ – если скачиваем, то до получения данных надо писать что-то вида

var req = http.request(options, function (res) {
res.setEncoding('binary');

А когда отправляешь картинку, надо второй параметр добавлять, вида

response.write(data,'binary');

И оно перестанет лазить в данные, а так било еще и кодировку html, просто я не сразу заметил, сперва на картинках увидел.

И нигде никогда на советах примерах всяких stackoverflow.com и документациях этого нет, что эта работа с кодировкой включена по умолчанию и она все данные портит.

Как это вообще? англоязычным ладно, пофиг на кодировки, но картинки? они приводят такие спокойно примеры кода, которые битые данные берут и отправляют…

Я не профи программер, изобретаю велосипеды. Наверняка вы сейчас найдете тонны прокси с открытым кодом (удовлетворяющие условиям выше), в него надо было просто посмотреть
Tags:
Hubs:
Total votes 30: ↑14 and ↓16-2
Comments21

Articles