gpt4 book ai didi

node.js - 用于确定是否发送 `100 Continue` 的正确 Node.js API

转载 作者:太空宇宙 更新时间:2023-11-03 21:56:58 25 4
gpt4 key购买 nike

我有一个奇怪的 HTTP 和类似 HTTP 处理的边缘情况,我必须支持一些损坏的客户端。具体来说,客户端将发出 HTTP PUT 请求,我需要在收到请求 header 后、客户端发送其请求正文之前发送 200 OK。通常,我这样做:

app.put('/*', function (req, res, next) {
res.socket.write('HTTP/1.0 200 OK\r\n\r\n');
/* Pipe socket and handle data here */
}

但是,对于较新版本的 Node.js(截至撰写本文时为 v6.2.2),当客户端使用正确的 HTTP/1.1 请求进行连接并在其请求 header 中包含 Expect: 100-continue 时,在我有机会发送自己的响应状态行之前,HTTP 服务器将(正确地)发送 HTTP/1.1 100 Continue 消息。结果,客户端将得到两个状态行:

HTTP/1.1 100 Continue
HTTP/1.0 200 OK

这不是一个大问题。我只需要检测 Node.js HTTP 服务器何时处理状态行,因此我不会发送重复的内容。诀窍是,我认为这个 API 没有正确公开。我摸索了一下,想出了这个方法:

app.put('/*', function (req, res, next) {
if (!res._sent100) {
res.socket.write('HTTP/1.0 200 OK\r\n\r\n');
}
/* Pipe socket and handle data here */
}

我的问题:是否有比使用 res._sent100 更好的方法来检测内置 HTTP 服务器何时发送 100 Continue

有一个 HTTP server checkContinue event 。但是,如果我处理该事件,则正常事件不会触发。我将其与 Express 结合使用,并且我需要正常的请求事件,以便正常的中间件堆栈能够运行。如果我可以处理checkContinue,将我自己的属性写入res,然后将其传回普通堆栈进行处理,那么一切都会好起来的。但是,我没有看到有记录的方法来执行此操作。

最佳答案

这似乎有效:

server.on('checkContinue', (req, res) => {
res.mySent100 = true;
res.writeContinue();
server.emit('request', req, res);
});

(其中 server 是为您的 Express 应用提供服务的 HTTPServer 实例)

关于node.js - 用于确定是否发送 `100 Continue` 的正确 Node.js API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38190867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com