【发布时间】:2020-09-14 15:12:52
【问题描述】:
我使用 node 和 express 编写了一个 Web 服务,它可以根据请求运行自动化并以最终报告进行响应。
我在客户端使用 jquery ajax(也尝试过 fetch API)在服务器中启动自动化,完成后,报告被压缩为 zip 并发送到客户端。
问题:
当服务器在 2 分钟内响应时,zip 下载成功,但当服务器响应时间超过 2 分钟时,http 请求失败,并显示“ERR_EMPTY_RESPONSE”,但服务器端没有问题。
我了解到默认情况下 HTTP 请求没有超时,但我不确定我为什么会遇到这个问题。
我想知道这种行为背后的原因。
在客户端发出的ajax 请求的片段:
var promise = $.ajax({
url: 'http://localhost:8001/test',
method:'POST',
xhrFields: {
responseType: 'blob'
},
success: function(res){
downloadFromBlob(res);
},
error: function(xhr, statusText, err){
alert(statusText);
},
data: options,
});
来自网络服务的片段(我刚刚尝试在此处重现该问题。自动化需要近 15 分钟才能完成):
router.get('/test/', runAutomation);
async function runAutomation(req, res, next){
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
const timeout = 120000;
setTimeout(()=> {
const path = 'reports.zip';
res.download(path);
}, timeout);
},
【问题讨论】: