web-dev-qa-db-ja.com

HTTPエラー:413リクエストエンティティが大きすぎます

私が持っているもの:
PHPで記述されたWebサービスにHTTP POSTリクエスト(XML形式)を送信するiPhoneアプリがあります。これは でホストされている仮想プライベート上にありますserver サーバー上の_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サービスは独自のログファイルを書き込み、小さなメッセージが適切に処理されていることがわかります。大きなメッセージはまったくログに記録されないので、Webサービスに到達する前に、Apacheの何かがそれらを拒否していると思いますか?

私が成功せずに試したこと:
(変更のたびにApacheを再起動しました。これらの手順は増分です。)

  1. ホスティングプロバイダーのWebベースの構成パネル:mod_securityを無効にする
  2. httpd.conf:_LimitXMLRequestBody 0_および_LimitRequestBody 0_
  3. httpd.conf:_LimitXMLRequestBody 100000000_および_LimitRequestBody 100000000_
  4. httpd.conf:_SecRequestBodyLimit 100000000_

この段階では、Apacheの_error.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"
_

Apacheの_error.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 "/"]
_

しかし、_1048576_のどこにも値_httpd.conf_がありません。

Webサービスに大きなメッセージを受信させるには、さらに何を試すことができますか?

SecRequestBodyAccess Off今のところ、これですべての問題が解決しました。

私はまったく同じ問題に遭遇しました。

SecRequestBodyNoFilesLimitが理由でした。

私の設定ではまったく使用されていませんが、デフォルト値の1048576があります。

この設定が存在することがわかったら、ファイルよりも大きく設定し、すべてが機能しています。

これがドキュメントです https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#wiki-SecRequestBodyNoFilesLimit

secRequestBodyLimitの上のエントリと比較すると、ドキュメントは非常に複雑に見えます。私がそれを煮詰めることができたのはこれです。実際の添付ファイルをアップロードする場合は、以前の設定が適用されます。ファイルの内容をフォームなどに貼り付け、ペイロードがPUTにある場合は、SecRequestBodyNoFilesLimitルールが適用されます。

8
KevinR

これはPHPサービスであると言っているので、php.iniはhttpd.confと同じくらい機能します。

Php.iniには、リクエストのサイズの制限を含め、いくつかのサイズ制限が定義されているので、まず、これらの制限がすべてニーズに十分対応できることを確認します。

3
Bart B