У меня возникла проблема с отправкой json вперед при использовании node.js в качестве прокси для предотвращения проблем с xss.

При регистрации полученных данных я не обнаружил никаких проблем.

1
javabeangrinder 17 Дек 2012 в 18:21

1 ответ

Лучший ответ

Решение пришло ко мне, когда я написал еще один сервер node.js, который отображал полученные данные, и позволил им имитировать сервер CouchDB.

Оказалось, что это был символ, отличный от ascii (шведский-Å). Полученные данные были обработаны как необработанные, неправильно рассчитанные Content-Length, или правильные, в зависимости от вашего настроения. ;)

Решением было использовать буфер для преобразования необработанных данных в utf8 перед вычислением Content-Length.

     :
if (request.method == 'PUT') {
    var data = '';
    request.on('data', function(dataSnippet) {
        data += dataSnippet;
        if (data.length > 1e6) {request.connection.destroy();}
    });
    request.on('end', function(dataSnippet) {
        data = new Buffer(data, 'UTF8');     //<---  This is the solution
        options.headers = {
            'Content-Encoding': 'UTF8',
            'Content-Type': 'application/json',
            'Content-Length': data.length    //<---  Where it went wrong
        }
        proxy = http.request(options, function(proxy_response) {
            proxy_response.setEncoding('UTF8');
            proxy_response.pipe(response);
        });
        proxy.write(data);
        proxy.end();
    });
}
    :
3
javabeangrinder 17 Дек 2012 в 18:21