Javascript 客户端JS/Angular中是否存在HTTP连接超时?
我使用Angular来发出HTTP请求,我想为它们指定一个超时 我知道我可以使用HttpInterceptor并为RxJS操作符添加一个超时,但是,这些超时适用于整个请求,如果数据传输正在进行,我不想中止整个请求,只有当浏览器在尝试连接时挂起时 例如,Node.js中提供了我需要的超时类型,这已得到很好的解释: 假设您调用了Javascript 客户端JS/Angular中是否存在HTTP连接超时?,javascript,angular,http,timeout,Javascript,Angular,Http,Timeout,我使用Angular来发出HTTP请求,我想为它们指定一个超时 我知道我可以使用HttpInterceptor并为RxJS操作符添加一个超时,但是,这些超时适用于整个请求,如果数据传输正在进行,我不想中止整个请求,只有当浏览器在尝试连接时挂起时 例如,Node.js中提供了我需要的超时类型,这已得到很好的解释: 假设您调用了socket.setTimeout(300)将超时设置为300 毫秒,DNS查找需要100毫秒,建立连接需要100毫秒 对于远程服务器,远程服务器发送响应的时间为200毫秒
socket.setTimeout(300)
将超时设置为300
毫秒,DNS查找需要100毫秒,建立连接需要100毫秒
对于远程服务器,远程服务器发送响应的时间为200毫秒
标头,50毫秒,用于传输响应正文的前半部分
剩下的50毫秒。而整个请求和响应
耗时超过500毫秒,根本不会发出超时事件
在Angular应用程序中有可能出现这样的超时吗?我查看了HttpClient的源代码。实际处理底层XMLHttpRequest的代码是类HttpXhrBackend,位于名为 不幸的是,HttpXhrBackend只使用XMLHttpRequest的默认设置,没有提供设置XMLHttpRequest超时值的方法 我看到了使用RxJS操作符缩短有效超时的建议, 但这有点像黑客,并不能真正满足你的要求 因此,从技术上讲,您的问题的答案是“否”,而不是HttpClient,但我认为您可以创建自己的HttpBackend实现并尝试注入它
p.S.展示了如何提供定制的HttpBackend实现。为什么使用RxJS操作符会被视为黑客使用RxJS操作符本身并不是黑客行为,但试图通过提前终止连接来缩短XMLHttpRequest的超时是黑客行为。YMMVFair,您是否也将中止请求归类为类似于
AbortController
hack的行为?@greybearedgeek感谢您的调查。我接受这一回答,因为我认为目前也没有合理的解决办法。不知何故,扩展HttpClient或使用其他定制实现会有更多的缺点,我想,所以我只是做了一个简单的尝试。