1

使用 node.js 作为代理以防止 xss 问题时,我在转发 json 时遇到问题。

在记录收到的数据时,我找不到任何问题。

4

1 回答 1

3

当我编写另一个显示接收到的数据的 node.js 服务器并让它模仿 CouchDB 服务器时,我找到了解决方案。

事实证明,罪魁祸首是一个非 ascii 字符(Swedish-Å)。收到的数据被视为原始计算 Content-Length,或者根据您的心情正确。;)

解决方案是在计算 Content-Length 之前使用 Buffer 将原始数据转换为 utf8。

     :
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();
    });
}
    :
于 2012-12-17T14:21:36.660 回答