如何使用快递获取Chrome中的net :: ERR CONTENT LENGTH MISMATCH

时间:2016-12-22 04:42:10

标签: node.js google-chrome http express content-length

出于测试目的,我想在浏览器中看到臭名昭着的错误net::ERR CONTENT LENGTH MISMATCH。但问题是我不知道如何。 Naïve尝试传递错误Content-Length似乎没有用 - 所有客户端都只是截断内容(顺便说一下 - 这是一些成熟的,RFC记录的行为吗?)。

以下是您可以尝试的代码:

var express = require('express');
var app = express();

app.get('/ping', function (req, res) {
  res.set({
    'Content-Length': 7,  
  }); 

  // don't use res.send, 
  //it will ignore explicitly set Content-Length in favor of the right one
  res.write('ABCDEFGHIJKLMNOP');
  res.end();
})

app.listen(3000, function () {
  console.log('http://127.0.0.1:3000');
});

minimal python server也是如此。 此外,我有一个疯狂的想法,可能express在设置内容长度时截断响应,但tcpdump清楚地表明在客户端收到全身。

2 个答案:

答案 0 :(得分:8)

看起来大多数客户端并不关心服务器是否发送的数据多于Content-Length中所述的数据。但是,如果您发送 less 数据,并确保连接在服务器端关闭(客户端不会关闭它,因为它认为还有更多数据要来),您可以触发{{ 1}}:

net::ERR_CONTENT_LENGTH_MISMATCH

答案 1 :(得分:1)

我修复了设置server.keepAliveTimeout

的问题
var httpsServer = https.createServer({
    key: fs.readFileSync('key.pem'),
    cert: fs.readFileSync('cert.pem'),
    ca: fs.readFileSync('intermediate.crt')
}, app).listen(port);
httpsServer.keepAliveTimeout = 60000 * 2;
httpsServer.listen(port);