HTTP 错误:413 请求实体太大

Tor*_*uun 2 php vps web-services httpd.conf apache-2.2

我有什么:
我有一个 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>
Run Code Online (Sandbox Code Playgroud)

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 步并没有真正采取。Apacheaccess.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"
Run Code Online (Sandbox Code Playgroud)

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 "/"]
Run Code Online (Sandbox Code Playgroud)

但是,我1048576httpd.conf.

我还能尝试什么,让网络服务接收大消息?

Tor*_*uun 8

SecRequestBodyAccess Off现在设置,解决了所有问题。

  • `SecRequestBodyAccess` 是 ModSecurity 的基本设置,通常可以在 `modsecurity.conf` 中找到,例如在 `/etc/modsecurity/modsecurity.conf`。 (2认同)

小智 8

我遇到了同样的问题。

SecRequestBodyNoFilesLimit 是原因。

它根本没有在我的配置中使用,但它有一个默认值,1048576。

一旦我发现此设置存在,我将其设置为大于我的文件,并且一切正常。

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

如果您与 SecRequestBodyLimit 上面的条目进行比较,文档似乎非常复杂。我能把它归结为这个;如果您上传的是实际文件附件,则优先设置将生效。如果您将文件的内容粘贴到表单之类的内容中,并且有效负载在 PUT 中,则 SecRequestBodyNoFilesLimit 规则。