javascript 为什么浏览器XHR send()在上传时没有收到408服务器错误,而cURL却收到了

y1aodyip  于 2023-01-16  发布在  Java
关注(0)|答案(1)|浏览(155)

我们打算温和地终止从浏览器发送的上传请求,特别是对于慢速连接。在服务器代码中,我们在3分钟后发送408 Request Timeout并丢弃请求数据。
在测试API时,我们意识到cURL如果速度受到限制,将按预期运行,但在测试Browser** AJAX 调用上传时,如果连接在Chrome中受到限制,它们将不会中止**,也不会在发送数据时收到服务器的响应
我们知道如何在客户端设置超时。但是,我很想知道为什么浏览器的 AJAX 调用在发送数据时不尊重服务器的响应。是否有办法让它像cURL一样一致?
如果你想自己尝试的话,我尝试在这个gist中使用一个简单的nodejs应用程序在gist中创建一个复制示例。

inb24sb2

inb24sb21#

AJAX 调用使用的是目前half duplex浏览器的fetch API,Bowsers还不支持full duplex
若要允许在请求中使用流,双工请求选项需要设置为“half”。
在浏览器中,即使服务器提前发送了响应,在请求正文完全发送之前,响应也永远不可用。这对所有浏览器获取都是如此。
未来,双工:对于流式和非流式请求,浏览器可以支持“full”。
https://developer.chrome.com/articles/fetch-streaming-requests/

相关问题