我正在尝试使用 Node.js 提供一些 JavaScript 文件,但无论出于何种原因,这些文件在传输过程中被切断了。代码:
httpsServer = http.createServer(function(req, res) {
var path = url.parse(req.url).pathname;
if (path[path.length - 1] == '/') {
path += 'index.html';
}
fs.readFile(root + path, function(err, data){
if (err) return send404(res);
res.writeHead(200, {
'Content-Type': getMimeType(getExtension(path)),
'Content-Length': data.length});
res.end(data);
});
}),
var privateKey = fs.readFileSync(settings.PRIVATE_KEY).toString();
var certificate = fs.readFileSync(settings.CERTIFICATE).toString();
var credentials = crypto.createCredentials({key: privateKey, cert: certificate});
httpsServer.setSecure(credentials);
httpsServer.listen(settings.HTTPS_PORT);
文件 http://github.com/LearnBoost/Socket.IO/raw/master/socket.io.js和 http://code.jquery.com/jquery-1.4.2.min.js .第一个恰好在 32KB 处截断,第二个恰好在 16KB 处截断。这不会发生在 HTTP 上,只会发生在 HTTPS 上,并且只会发生在网络上(例如:不是来自本地主机)。
非常感谢任何帮助。
最佳答案
你应该使用 Content-Length: Buffer.byteLength(data, 'utf8')
而不是 Content-Length: data.length
其中 Buffer
是全局对象( Node 0.3.x)或 Node 0.2.x 中的 var Buffer = require('buffer')
这将为您省去很多麻烦,并可能通过截断的答案解决您的问题也是。
关于Node.js 在通过 HTTPS 服务时切断文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3905473/