Ссуки разработчики 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/