1. ホーム
  2. node.js

[解決済み] Chromeでnet::ERR CONTENT LENGTH MISMATCHをexpressで取得する方法

2022-02-15 14:06:04

質問

テスト用に、ブラウザで悪名高いエラーを表示したい。 net::ERR CONTENT LENGTH MISMATCH . しかし、その方法がわからないのです。間違ったものを渡すだけのナイーブな試み 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');
});

についても同様です。 最小限の python サーバー . また、私はとんでもないことを思いついた。 express は content-length が設定されるたびにレスポンスを切り詰めますが tcpdump は、クライアント側で全ボディが受信されることを明確に示しています。

解決方法は?

に記載されている以上のデータをサーバーが送信しても、ほとんどのクライアントは気にしないようです。 Content-Length . しかし、もしあなたが 以下 データを取得し、サーバ側で接続を閉じるようにすると (クライアントはまだデータが残っていると考えるので閉じない)、 サーバ側で net::ERR_CONTENT_LENGTH_MISMATCH :

app.get('/ping', function (req, res) {
  res.set({ 'Content-Length': 70 });
  res.write('ABCDEFGHIJKLMNOP');
  res.end();
  res.connection.end();
})