node.js - 如何在 NodeJS 中取消传入的 POST 请求发送 4XX 但没有收到整个数据?

标签 node.js http post request

客户端可以将文件上传到我的 NodeJS 服务器。我想确保客户端不会滥用服务器并上传太大的文件。因此,我想在检测到问题后立即取消请求,同时向客户端返回有意义的状态代码和响应。假设用户上传一个 100 MB 的文件,但我的服务器的最大文件大小为 10 MB。

如果我这样做

req.socket.destroy()

如果在 Java 中,客户端将收到 SocketException,或者在浏览器中收到已取消的请求。

有没有更好的方法来发送优雅的响应,同时避免接收整个 100 MB 的文件?

最佳答案

来自 413 Request Entity Too Large

The server is refusing to process a request because the request entity is larger than the server is willing or able to process. The server MAY close the connection to prevent the client from continuing the request.

所以根据协议(protocol)你应该先发送一个413响应然后关闭连接。

尝试

res.writeHead(413, {'Content-Type': 'text/plain'});
res.end('10mb max.');

关于node.js - 如何在 NodeJS 中取消传入的 POST 请求发送 4XX 但没有收到整个数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16309410/

相关文章:

node.js - 尽管进行了配置,Cypress.io 仍不采用 index.js

node.js - 使用@nguniversal/express-engine 包的 Angular SSR 出现此错误(错误 TS6053 : File '/project/src/server.ngtypecheck.ts' not found. 中的错误)

javascript - 下载的 PDF 看起来是空的,尽管它包含一些数据

javascript - 从 Sling API JSON Post 获取代码 500

http - 通过 IP 限制对站点的访问

python - NoReverseMatch at/Reverse 未找到 'post_detail'

php - 内容类型不随 CURLOPT_HTTPHEADERS 改变

node.js - 使用 cradle 和 CouchDB 对 Node.js 进行压力测试时,会出现错误 : EADDRINUSE, 地址已在使用中,这是怎么回事?

javascript - #9 挑战 - 了解您的 Node (异步回调)

node.js - 从 MJPEG 流中提取 JPEG 并通过 websocket 发布 base64 编码图像