Node.js在通过HTTPS服务时切断文件

我正在尝试使用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,只有通过networking(例如:不是从本地主机)。

任何帮助将非常感激。

而不是Content-Length: data.length你应该使用Content-Length: Buffer.byteLength(data, 'utf8') ,其中Buffer是一个全局对象(节点0.3.x)或者var Buffer = require('buffer') 0.2.x这将节省你很多的麻烦,并可能修复你的问题与截断答案了。

我刚刚也看到了。 相同的设置 – HTTPS,从git回购的最新节点。

一个大文件(170K)从来没有正确完成发送。 我试图从asynchronous切换到同步,但没有任何区别。 目前为止只有修正这个问题才能使文件变小。 这是一个大的软盘JPG,所以很容易做到。 问题消失了。

这可能是readFile的默认编码和res.end()之间的一个断开。 如果不指定编码,readFile只加载原始数据,而end()默认为utf8。 我不是100%确定的,但是来自文件的原始数据可能会返回比utf8编码的string更短的结尾。

我试图重新创build你的错误,失败了,所以你可能需要升级你的节点版本。 我正在使用github的最新代码。

这个问题应该在最新版本的Node.js中解决。 你可以在v0.4.2上testing吗?

你有没有试过使用内置的HTTPS服务器? http://nodejs.org/docs/v0.4.11/api/https.html