我们打算温和地终止从浏览器发送的上传请求,特别是对于慢速连接。在服务器代码中,我们在3分钟后发送408 Request Timeout并丢弃请求数据。
在测试API时,我们意识到cURL如果速度受到限制,将按预期运行,但在测试Browser** AJAX 调用上传时,如果连接在Chrome中受到限制,它们将不会中止**,也不会在发送数据时收到服务器的响应。
我们知道如何在客户端设置超时。但是,我很想知道为什么浏览器的 AJAX 调用在发送数据时不尊重服务器的响应。是否有办法让它像cURL一样一致?
如果你想自己尝试的话,我尝试在这个gist中使用一个简单的nodejs应用程序在gist中创建一个复制示例。
1条答案
按热度按时间inb24sb21#
AJAX 调用使用的是目前
half duplex
浏览器的fetch
API,Bowsers还不支持full duplex
。若要允许在请求中使用流,双工请求选项需要设置为“half”。
在浏览器中,即使服务器提前发送了响应,在请求正文完全发送之前,响应也永远不可用。这对所有浏览器获取都是如此。
未来,双工:对于流式和非流式请求,浏览器可以支持“full”。
https://developer.chrome.com/articles/fetch-streaming-requests/