使用 node.js 作为代理以防止 xss 问题时,我在转发 json 时遇到问题。
在记录收到的数据时,我找不到任何问题。
当我编写另一个显示接收到的数据的 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();
});
}
: