apache 400 的原因是什麼?

apache 400 的原因是什麼?

有誰知道關於 apache 為什麼返回 400 狀態代碼的任何官方或非官方文件?我知道這是由於錯誤的客戶端請求造成的,但是什麼構成錯誤的客戶端請求呢?我知道諸如大請求大小和無效字元之類的事情可能會導致 400,但我想要某種明確的清單。

例如,o'reilly 的「apache 權威指南」沒有給出這個細節。

謝謝!達米安

答案1

AFAIK 幾乎按照定義:不可能有一個明確的清單導致回應400,因為回應程式碼是針對 Apache httpd 拋出的任何內容,無法將其解析為有效請求。

那可能是這樣的事情“出現”類似於有效的請求,也可能完全是垃圾。

響應400相當於WTF*#K

正如 @NikitaKipriyanov 所評論的,apache(錯誤)日誌通常會記錄觸發 400 回應的請求行。


歷史上,HTTP 請求行以回車和換行因此,您的日誌通常會顯示在 Apache 收到第一個回車符和換行符之前拋出的所有內容。

在我的 apache 日誌中快速搜尋 400 個回應會顯示一些或重複出現的「錯誤請求」類型:

  • 最常見的是:a看起來有效HTTP 1.1請求行,由區分大小寫的請求方法, A空間,要求的網址, 其他空間協議版本例如:
    "GET / HTTP/1.1"
    很可能被拒絕,因為Host:標頭未包含在請求中,且該標頭在 HTTP/1.1 中是強制性的

  • 很常見:二進位(握手)數據顯示為轉義十六進制,例如

    • "\x16\x03\x01\x01\xfc\x01"在此範例中,這是由於嘗試在純 HTTP 端口 80(或任何其他端口,甚至是 443,當未配置 TLS 時)上建立 TLS 1.2 連接而引起的
    • "\x16\x03\x01是類似的 TLS 1 / 1.1 握手
    • \x16\x03"是類似SSL3握手
    • 在許多其他變體中
    • 甚至只是一個"\n"
  • 嘗試連接完全不同的協議比 HTTP(S) 到 Web 伺服器連接埠即

    • "SSH-2.0-OpenSSH_7.4"探測 Web 伺服器連接埠是否提供 SSH(系統管理員和使用者經常使用的一種技巧來繞過公司防火牆)
    • "SSTP_DUPLEX_POST /sra_{BA195980-CD49-458b-9E23-C84EE0ADCD75}/ HTTP/1.1"探測支援的 VPN 端點SSTP協定
    • 和別的。

相關內容