Javascript 使用Express发送无效的HTTP响应

Javascript 使用Express发送无效的HTTP响应,javascript,http,express,Javascript,Http,Express,我正在为一个web应用程序构建一些测试,我想测试客户端优雅地处理无效HTTP响应的能力。您建议如何修改响应,使其不再有效?我尝试了以下操作,但Express随后显然修复了内容长度: app.get('/broken/', function(req, res) { console.log('request received for ' + req.path); res.set('Content-Length', 0).send('more than zero'); }); 编辑:

我正在为一个web应用程序构建一些测试,我想测试客户端优雅地处理无效HTTP响应的能力。您建议如何修改响应,使其不再有效?我尝试了以下操作,但Express随后显然修复了
内容长度

app.get('/broken/', function(req, res) {
    console.log('request received for ' + req.path);
    res.set('Content-Length', 0).send('more than zero');
});

编辑:注意,我不一定控制传入的请求。在过去,其中一些是无效的。

事实上,
Express
在方法内部重置
内容长度

基本上,
send
只不过是设置一堆头并将其余工作委托给其他人

为了绕过这种行为,您可以直接使用
end
方法

app.get('/broken/', function(req, res) {
  res.set('Content-Length', 0)
     .set('Content-Type', type);
     .end('more than zero');
});

实际上,
Express
在方法内部重置
内容长度

基本上,
send
只不过是设置一堆头并将其余工作委托给其他人

为了绕过这种行为,您可以直接使用
end
方法

app.get('/broken/', function(req, res) {
  res.set('Content-Length', 0)
     .set('Content-Type', type);
     .end('more than zero');
});

我认为正确的答案(即使您可以解决这个问题)是不要为此使用HTTP客户机。任何HTTP客户端都会尽力防止您进行无效的HTTP调用。因此,正确的答案是创建一个故意不一致的HTTP客户机,这意味着您需要开始编写tcp套接字。即使这意味着这不完全适合您的测试框架,我认为您只需要一次测试就可以使用它。

我认为正确的答案(即使您可以解决它)是不使用HTTP客户端。任何HTTP客户端都会尽力防止您进行无效的HTTP调用。因此,正确的答案是创建一个故意不一致的HTTP客户机,这意味着您需要开始编写tcp套接字。即使这意味着这不完全适合您的测试框架,我认为您只需要一次测试就可以使用它。

我不确定在客户端处理无效响应是否有意义。响应有效或客户端在等待oneTo me时超时,这听起来像是
curl
netcat
的工作。您可能需要远离一个有代码围绕的框架,以确保有效的响应,您可以在node.js中创建一个简单的TCP服务器,然后解析传入的请求,并完全按照您的需要发送自己的响应-基本上是创建一个简单的小型http服务器,您可以在其中控制一切。如果您使用现有的服务器或框架,它几乎肯定会处理所有http连接管理,并将防止无效响应。如果你想要达到那种级别的控制,你必须绕过普通的服务器,提供你自己的。我不确定在客户端处理无效响应是否有意义。响应有效或客户端在等待oneTo me时超时,这听起来像是
curl
netcat
的工作。您可能需要远离一个有代码围绕的框架,以确保有效的响应,您可以在node.js中创建一个简单的TCP服务器,然后解析传入的请求,并完全按照您的需要发送自己的响应-基本上是创建一个简单的小型http服务器,您可以在其中控制一切。如果您使用现有的服务器或框架,它几乎肯定会处理所有http连接管理,并将防止无效响应。如果你想要达到那种控制级别,你必须绕过普通的服务器并提供你自己的。谢谢,这实际上完成了创建一个无效的HTTP响应。不幸的是,大多数客户端似乎只是读取内容长度指定的数量,然后愉快地继续,而不是抛出期望的错误。谢谢,这实际上完成了创建无效HTTP响应。不幸的是,大多数客户机似乎只是读取内容长度指定的数量,然后愉快地继续,而不是抛出期望的错误。