防止 post 请求超时
Prevent post request timeout
我正在向正文中仅包含文件名的 nodejs 服务器发出 POST 请求。收到请求后,节点将相应的本地文件上传到 Amazon S3 存储桶。文件有时可能需要一段时间才能上传,有时请求会超时。如何延长或防止超时发生?
您可以在继续上传的同时将响应发送回浏览器。您不必等到上传完成后再完成响应。例如,您可以这样做:
res.end("done"); // or put whatever HTML you want in the response
并且,这将结束 post 响应,浏览器会很高兴。同时,您的服务器继续完成上传。
这样做的好处是,浏览器和用户无需等待服务器完成其业务即可继续他们想做的下一件事。我知道的唯一缺点是,如果上传失败,您没有一种简单的方法来通知浏览器它失败了(因为响应已经完成)。
超时本身由浏览器控制。这不是您可以直接从服务器控制的东西。如果您不断向浏览器发送数据,那么它很可能不会超时。所以,只要上传还在继续,你就可以这样做:
res.write(" ");
每 15 秒左右作为一种保持活动状态,使浏览器保持快乐并防止其超时。您可能会设置一个 15 秒的间隔计时器来发送少量数据,然后在上传完成后停止计时器。
如果您在生成 post 的浏览器中控制 Javascript,那么您可以在来自 Javascript 的 Ajax 调用上设置超时值浏览器。当您在浏览器中创建一个 XMLHttpRequest
对象时,它有一个名为 timeout
的 属性,您可以将其设置为异步 ajax 调用。有关详细信息,请参阅 MDN。
我正在向正文中仅包含文件名的 nodejs 服务器发出 POST 请求。收到请求后,节点将相应的本地文件上传到 Amazon S3 存储桶。文件有时可能需要一段时间才能上传,有时请求会超时。如何延长或防止超时发生?
您可以在继续上传的同时将响应发送回浏览器。您不必等到上传完成后再完成响应。例如,您可以这样做:
res.end("done"); // or put whatever HTML you want in the response
并且,这将结束 post 响应,浏览器会很高兴。同时,您的服务器继续完成上传。
这样做的好处是,浏览器和用户无需等待服务器完成其业务即可继续他们想做的下一件事。我知道的唯一缺点是,如果上传失败,您没有一种简单的方法来通知浏览器它失败了(因为响应已经完成)。
超时本身由浏览器控制。这不是您可以直接从服务器控制的东西。如果您不断向浏览器发送数据,那么它很可能不会超时。所以,只要上传还在继续,你就可以这样做:
res.write(" ");
每 15 秒左右作为一种保持活动状态,使浏览器保持快乐并防止其超时。您可能会设置一个 15 秒的间隔计时器来发送少量数据,然后在上传完成后停止计时器。
如果您在生成 post 的浏览器中控制 Javascript,那么您可以在来自 Javascript 的 Ajax 调用上设置超时值浏览器。当您在浏览器中创建一个 XMLHttpRequest
对象时,它有一个名为 timeout
的 属性,您可以将其设置为异步 ajax 调用。有关详细信息,请参阅 MDN。