HTTP 错误:413 请求实体太大

HTTP 错误:413 请求实体太大

我拥有的:
我有一个 iPhone 应用程序,它向用 PHP 编写的 Web 服务发送 HTTP POST 请求(XML 格式)。这是在托管虚拟专用服务器所以我可以编辑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 "/"]

但是,我没有1048576在任何地方看到它的价值httpd.conf

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

答案1

我遇到了完全相同的问题。

原因就是 SecRequestBodyNoFilesLimit。

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

一旦我发现此设置存在,我就会将其设置得比我的文件更大,并且一切正常。

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

如果与 SecRequestBodyLimit 上方的条目进行比较,文档似乎非常复杂。我能归结为以下内容:如果您要上传实际文件附件,则先前的设置将占主导地位。如果您将文件的内容粘贴到表单之类的东西中,并且有效负载在 PUT 中,则 SecRequestBodyNoFilesLimit 占主导地位。

答案2

SecRequestBodyAccess Off现在已经设定好了,所有问题都解决了。

答案3

您说这是一个 PHP 服务,那么这意味着 php.ini 的作用与 httpd.conf 一样大。

php.ini 中定义了许多大小限制,包括请求大小的限制,因此我首先要验证这些限制是否足够满足您的需要。

答案4

我尝试过的所有修复方法都失败了。最后搜索了一下,在这里找到了这个。

SecRequestBodyAccess 关闭

这招很管用。我知道这已经是 10 年前的事了,但确实帮了我大忙!

相关内容