2016-12-22 14 views
2

テストのために、私はブラウザの悪名高いエラーnet::ERR CONTENT LENGTH MISMATCHに見たいと思っています。しかし事は私がどのようにわからないということです。 Content-Lengthを間違って渡すだけの試みはうまくいかないようです - すべてのクライアントは内容を切り捨てるだけです(btw - これは確かに確立されたRFC文書ですか?)。エクスプレスを使用してChromeでnet :: ERRコンテンツの長さのミスマッチを取得する方法

ここにあなたが試すことができますコードです:

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はcontent-lengthが設定されていると応答を切り捨てますが、tcpdumpは明らかにクライアント側の全身が受信されたことを示しています。

+0

なぜあなたは*エラーを見たいですか? – mscdex

+0

@mscdexテスト目的のために、正確に人々が4xxと5xxのhttpエラーを見たいという理由からです。 – shabunc

+0

そのエラーをトリガーする場合は、コンテンツの長さの値を実際のコンテンツよりも大きくし、 'res.end()'の後に 'req.destroy()'を呼び出します。 – robertklep

答えて

5

サーバが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(); 
}) 
関連する問題