Apache-2.2

HTTP 錯誤:413 請求實體太大

  • August 10, 2015

我有什麼:

我有一個 iPhone 應用程序,可以將 HTTP POST 請求(XML 格式)發送到用 PHP 編寫的 Web 服務。這是在託管的虛擬專用伺服器上,因此我可以編輯httpd.conf伺服器上的其他文件,然後重新啟動 Apache。

問題:

只要請求不太大,Web 服務就可以完美執行,但限制在 1MB 左右。之後,伺服器響應:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>413 Request Entity Too Large</title>
</head><body>
<h1>Request Entity Too Large</h1>
The requested resource<br />/<br />
does not allow request data with POST requests, or the amount of data
provided in the request exceeds the capacity limit.
</body></html>

Web 服務編寫自己的日誌文件,我可以看到小消息處理得很好。更大的消息根本沒有記錄,所以我猜 Apache 中的某些東西甚至在它們到達 Web 服務之前就拒絕了它們?

我嘗試過但沒有成功的事情:(

每次更改後我都重新啟動了 Apache。這些步驟是增量的。)

  1. 託管服務提供商的基於 Web 的配置面板:禁用 mod_security
  2. httpd.conf:LimitXMLRequestBody 0LimitRequestBody 0
  3. httpd.conf:LimitXMLRequestBody 100000000LimitRequestBody 100000000
  4. httpd.conf:SecRequestBodyLimit 100000000

在這個階段,Apacheerror.log包含一條消息:

ModSecurity: Request body no files data length is larger than the configured limit (1048576)

ModSecurity 有一個錯誤聲明的事實表明我的第 1 步並沒有真正採取。Apache 的access.log樣子是這樣的,有 3 條成功的小消息和 2 條失敗的大消息:

"POST / HTTP/1.1" 200 310 "-" "Audiopad/1.0 CFNetwork/548.0.4 Darwin/11.0.0"
"POST / HTTP/1.1" 200 310 "-" "Audiopad/1.0 CFNetwork/548.0.4 Darwin/11.0.0"
"POST / HTTP/1.1" 200 310 "-" "Audiopad/1.0 CFNetwork/548.0.4 Darwin/11.0.0"
"POST / HTTP/1.1" 413 464 "-" "Audiopad/1.0 CFNetwork/548.0.4 Darwin/11.0.0"
"POST / HTTP/1.1" 413 464 "-" "Audiopad/1.0 CFNetwork/548.0.4 Darwin/11.0.0"

Apacheerror.log有關於大消息的以下資訊:

[error] [client 194.24.138.43] ModSecurity: Request body no files data length is larger than the configured limit (1048576). [hostname "webservice-audiopad.golfbravo.net"] [uri "/"]
[error] [client 194.24.138.43] ModSecurity: Request body no files data length is larger than the configured limit (1048576). [hostname "webservice-audiopad.golfbravo.net"] [uri "/"]

但是,我1048576httpd.conf.

我還可以嘗試什麼來讓 Web 服務接收大消息?

SecRequestBodyAccess Off現在設置,這解決了所有問題。

我遇到了同樣的問題。

SecRequestBodyNoFilesLimit 是原因。

它根本沒有在我的配置中使用,但它確實有一個預設值,1048576。

一旦我發現此設置存在,我將其設置為大於我的文件並且一切正常。

這是文件https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#wiki-SecRequestBodyNoFilesLimit

如果您與 SecRequestBodyLimit 上面的條目進行比較,文件似乎非常複雜。我能把它歸結為這個;如果您要上傳實際的文件附件,則之前的設置將適用。如果您將文件的內容粘貼到表單之類的內容中,並且有效負載位於 PUT 中,則 SecRequestBodyNoFilesLimit 規則。

引用自:https://serverfault.com/questions/402630