2016-12-19 6 views
0

私はWebアプリケーション用のテストをいくつか構築していますが、無効なHTTP応答を正常に処理するクライアントの機能をテストしたいと思います。あなたはそれがもう有効でないように、どのように応答をマングリングすることを提案しますか?Expressで意図的に無効なHTTP応答を送信する

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

EDIT:は注意することは、私は着信要求の制御では必ずしもないんだけど、私は以下のが、Expressは明らかその後Content-Lengthを固定してみました。過去にいくつかは無効であった。

+0

クライアントで無効な応答を処理することに意味があるかどうかはわかりません。応答が有効であるか、クライアントが1つを待ってタイムアウトします –

+0

私には、これは 'curl'や' netcat'の仕事のようです。 –

+0

おそらくあなたが望むものを送信できるだけの有効な応答を保証するために、コードを含むフレームワークから離れていく必要があります。 – jfriend00

答えて

1

私はこのためにHTTPクライアントを使用に正しい答えは(あなたがそれを回避することができたとしても)ではないと思います。すべてのHTTPクライアントは、無効なHTTP呼び出しを防止するために努力します。正解は、故意に不適合なHTTPクライアントを作成することです。これは、tcpソケットを作成する必要があることを意味します。たとえこれがあなたのテストフレームワークに完全に収まらないということを意味するとしても、私はあなたが1回のテストでこれを必要とするだけです。

1

実際にExpressリセットContent-Lengthresponse.sendの方法です。

if (chunk !== undefined) { 
    len = chunk.length; 
    this.set('Content-Length', len); 
} 

基本的には、sendは、ヘッダの束を設定し、http.ServerResponse.endに残りの作業を委任するよりも何もしません。

この現象を回避するには、endメソッドを直接使用できます。

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

ありがとうございます。実際には無効なHTTP応答の作成が完了しています。残念ながら、ほとんどのクライアントは、コンテンツの長さで指定された量を読み込んだ後、喜んで続行し、期待されるエラーをスローしません。 –

関連する問題