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

Ссуки разработчики node.js…

Короче, пишу свой прокси-сервер на 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 и документациях этого нет, что эта работа с кодировкой включена по умолчанию и она все данные портит.

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

оно же на Хабре – тут https://habrahabr.ru/post/326428/