是不是如果chrome不关闭,服务端一直hold请求,那么浏览器这边会一直显示Pending?
测试时间:2019/02/26
MacOS 环境下,timeout在各浏览器默认值为(以下浏览器都为当前时间最新版本)
测试代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<button id="queryBtn">query</button>
<time id="time"></time>
<script>
const ajax = (url = '/api/timeout') => {
const xhr = new XMLHttpRequest();
//设置xhr请求的超时时间
xhr.timeout = 60 * 5 * 1000;
xhr.responseType = "text";
xhr.open('GET', url, true);
xhr.onload = function(e) {
if(this.status == 200 || this.status == 304){
console.log('请求完毕')
if(loopId) {
clearInterval(loopId)
}
}
console.log(e)
}
xhr.send()
}
const queryBtn = document.querySelector('#queryBtn')
const time = document.querySelector('#time')
loopId = null
queryBtn.addEventListener('click', (event) => {
ajax()
const startTime = new Date()
loopId = setInterval(() => {
const s = parseInt((new Date() - startTime) / 1000)
time.innerHTML = s + ' s'
}, 500)
})
</script>
</body>
</html>
var express = require('express');
var app = express();
var http = require('http').Server(app);
var bodyParser = require('body-parser');
app.use(bodyParser());
app.use(express.json());
app.use(express.static(__dirname + ''));
app.get('/', function(req, res){
res.render('index', {});
// res.send('<h1>Welcome Realtime Server</h1>');
});
app.get('/api/timeout', function(req, res){
setTimeout(() => {
res.send("i don't see a lot of PUT requests anymore")
}, 60 * 10 * 1000)// 这里设置服务器的响应时间
});
http.listen(3004, function(){
console.log('http://127.0.0.1:3004');
});
且在chrome设置timeout为5min没有用,在4min时已经提示请求失败
上面这张是chrome,下面是Safari
这个是看你请求时的timeout设置为多少的吧?没有设置的话应该默认是0,即永不超时。举个例子,在异步ajax请求的时候,要设置请求的timeout(超时时间),超过这个时间会回调error。
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
浏览器的默认值是5分钟
原回答
查看默认值的地址