0

具体的には、node.js サーバーの観点から話しています。http.client検証するため、node.js でこれをテストするのは困難content-lengthです。

クライアントは、少なくとも到達した時点で、ボディのコンテンツの長さについて嘘をつくことができますhttp.createServer().on('request')か?

  • クライアントは より大きいボディを送信できますcontent-lengthか? パーサーレベルでチェックされる可能性が最も高いため、これは可能ではないと思いますが、証明が必要です。
  • クライアントは より小さいボディを送信できますcontent-lengthか? これは本当かもしれないと思います。

行儀の良い http クライアントを使用しない悪意のあるユーザーが心配です。

4

2 に答える 2

1

もちろん可能です。Web サーバーが実行されている任意の IP/ポートへの TCP ソケット接続を開き、そこに必要なものを書き込むことができます。もちろん、行儀の良いクライアントはこれを行いませんが、クライアントがそうするのを止めるものは何もありません。

ただし、これは、サーバーの問題 (この場合はノード) で使用している HTTP スタックである傾向があります。1) やみくもに (巨大な) content-length バイトを読み取らないようにする必要があります。これは、サーバーを無残にクラッシュさせる可能性があるためです。2) (妥当なサイズの要求の場合) クライアントが嘘をついていないことを確認する必要があります。

ノードの場合、ここに表示されます: https://github.com/joyent/node/blob/master/deps/http_parser/http_parser.c#L1471

試してみてください;-)

于 2013-10-19T19:52:05.630 に答える
0


もちろん、送信できるコンテンツの長さによって異なります。問題は、クライアントがそれをどうするかです。
コンテンツをダウンロードしようとして完全に台無しになる可能性のあるスクリプトまたはサーバー クライアントがあります。
ほとんどのブラウザーにはエラー トレラントな動作が実装されているようですが、さまざまな実装が存在します。
ソケットを開いたままにして閉じないという古いものを持っていたことを覚えています。これにより、終わりのないページの読み込みが発生しました。
一部のネットスケープ ブラウザは、適切なコンテンツの長さに完全に依存しているようです。
content-legth を離しておくことをお勧めします。これはすべてのブラウザで機能するはずです。

于 2013-10-19T20:59:35.423 に答える