[英]Why does CURL's PUT fail authentication before uploading the payload, but XHR PUT only after?
[英]Why browser XHR send() does not receive 408 server error while uploading, but cURL does
我们打算优雅地终止从浏览器发送的上传请求,特别是对于慢速连接。 在服务器代码中,我们在3 分钟后发送408 Request Timeout并丢弃请求数据。
在测试 API 时,我们意识到如果速度受到限制, cURL将按预期运行,但在测试浏览器Ajax时,如果连接在 Chrome 中受到限制,它们将不会中止,也不会在发送数据时接收服务器的响应。
我们知道如何在客户端设置超时。 但是,我很想知道为什么浏览器的 Ajax 调用在发送数据时不尊重服务器的响应。 如果无论如何让它表现得像 cURL 一样一致?
如果您想自己尝试,我尝试使用此要点中的简单 nodejs 应用程序在要点中创建一个复制示例。
Ajax 调用使用当前为half duplex
的浏览器的fetch
API。 Bowsers 还不支持full duplex
。
要允许在请求中使用流,需要将双工请求选项设置为“一半”。
在浏览器中,在请求正文完全发送之前,响应永远不可用,即使服务器更早发送响应也是如此。 这适用于所有浏览器抓取。
将来,浏览器可能会支持 duplex: 'full' 用于流式和非流式请求。
https://developer.chrome.com/articles/fetch-streaming-requests/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.