如何解决设置HTTPS超时的正确方法
我的上传系统运行良好,但是由于我在快递服务器上实施了SSL,因此将其切断,任何花费2分钟以上的上传都会失败,并且我得到net::ERR_FAILED
,而以前任何大小的文件都可以花费了它想要的时间,最终到达了那里,但是现在恰好2分钟,它停止了。
我调查了很多帖子,讨论节点中HTTPS的超时。
从那些我尝试过的超时设置中有很多不同的变化,但是似乎没有任何作用。
我尝试过的事情示例:
在我的帖子中:
app.post(
'/uploadResources/',extendTimeout,uploadResources.array('file',1),(req,res,next) => {
console.log("File must be done if you can read this...")
req.socket.setTimeout(500000);
res.json({
file: req.file,});
req.end();
});
function extendTimeout (req,next) {
console.log("Started!");
// adjust the value for the timeout,here it's set to 3 minutes
res.setTimeout(500000,() => { console.log("timed out") })
next();
}
具有以下变体:
res.connection.setTimeout(0);
//无限
res.connection.setTimeout(500000);
在定义服务器的地方,我尝试了所有这些方法:
server.setTimeout(500000);
server.timeout = 500000;
server.on('connection',function(socket) {
socket.setTimeout(500000);
socket.setKeepAlive(true);
});
这些都没有改变!无论如何,在我添加SSL证书并仅使用HTTP之前,我就这样定义了服务器:
var app = express();
// Listen on port 3000 for any calls
var server = app.listen(3000,function () {
console.log('VCS-API REST server started - yay.');
});
server.on('connection',function(socket) {
// 10 minutes timeout
socket.setTimeout(500000);
socket.setKeepAlive(true);
});
这很好用...但是,我添加了我的SSL证书,现在我定义了这样的服务器(对于在不到2分钟的时间内完成的较小文件来说,它可以正常使用):
const httpsOptions = {cert,ca,key};
const httpsServer = https.createServer(httpsOptions,app);
// Listen on port 443 for any calls
var server = httpsServer.listen(443,function () {
console.log('VCS-API REST server started - yay.');
});
server.on('connection',function(socket) {
// 10 minutes timeout
socket.setTimeout(500000);
socket.setKeepAlive(true);
});
所以我的确切问题是:在HTTPS中设置超时以启用更长的文件上传的正确方法是什么?
解决方法
因此,用op调试它很有趣,结果发现使用软件包“ multer-s3”建立了第二个连接。
这是发生问题的连接,而不是从浏览器->节点上载的文件。
要揭露此问题,添加了client error的事件侦听器:
server.on('clientError',(err,socket) => {
console.log(err)
});
显示超时错误
ERR_HTTP_REQUEST_TIMEOUT
未处理的错误导致整个连接关闭。只需处理事件中的错误就足以使请求按预期完成。
如果不研究multer-s3封装,则当基础服务器为https时似乎会出现某种超时问题。解决此问题的方法是捕获错误,记录错误并允许请求继续。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。