Apache 400 の原因は何ですか?

Apache 400 の原因は何ですか?

Apache が 400 ステータス コードを返す理由に関する公式または非公式のドキュメントを知っている人はいますか? これは不正なクライアント リクエストによるものであることはわかっていますが、不正なクライアント リクエストとは何でしょうか? リクエスト サイズが大きいことや無効な文字などが 400 の原因になることはわかっていますが、何らかの決定的なリストが欲しいです。

たとえば、O'Reilly の「Apache の決定版ガイド」ではこの詳細は説明されていません。

ありがとう!ダミアン

答え1

400私の知る限り、そしてほぼ定義上、応答コードは Apache httpd にスローされるあらゆるものに対するものであり、有効な要求として解析できないため、応答の原因となる明確なリストは存在しません。

それは何か「現れる」有効なリクエストのように見える場合もあれば、まったく意味のないリクエストの場合もあります。

応答は!400と同等です。WTF*#K

@NikitaKipriyanov がコメントしたように、Apache (エラー) ログには通常、400 応答をトリガーしたリクエスト行が記録されます。


歴史的に、HTTPリクエスト行は復帰改行そのため、ログには通常、最初の復帰と改行を受信するまで Apache に投げられたすべての内容が表示されます。

Apache ログで 400 応答をすばやく検索すると、次のような「不正なリクエスト」タイプの繰り返しが表示されます。

  • 最も一般的なもの:有効な見た目HTTP 1.1リクエストライン、それは大文字と小文字を区別するリクエスト方法空間、要求されたメールアドレス、 別の空間そしてそのプロトコルバージョンたとえば、リクエストにヘッダーが含まれていなかった
    "GET / HTTP/1.1"
    ために拒否された可能性が高く、そのヘッダーは HTTP/1.1 では必須です。Host:

  • 非常に一般的な:バイナリ(ハンドシェイク)データこれはエスケープされた16進数として表示されます。たとえば

    • "\x16\x03\x01\x01\xfc\x01"この例では、プレーン HTTP ポート 80 (または TLS が設定されていない場合は 443 などの他のポート) で TLS 1.2 接続を確立しようとしたことが原因です。
    • "\x16\x03\x01TLS 1 / 1.1ハンドシェイクに似ています
    • \x16\x03"同様のSSL3ハンドシェイクである
    • 他の多くのバリエーション
    • あるいは単に"\n"
  • 接続しようとすると完全に異なるプロトコルHTTP(S)よりもウェブサーバーのポートへの接続が速い

    • "SSH-2.0-OpenSSH_7.4"Web サーバーのポートで SSH が提供されているかどうかを調べる (企業のファイアウォールを回避するためにシステム管理者やユーザーがよく使用するトリック)
    • "SSTP_DUPLEX_POST /sra_{BA195980-CD49-458b-9E23-C84EE0ADCD75}/ HTTP/1.1"VPNエンドポイントをサポートするSSTPプロトコル
    • その他。

関連情報