PHP 413(请求实体太大)

Posted

技术标签:

【中文标题】PHP 413(请求实体太大)【英文标题】:PHP 413 (Request Entity Too Large) 【发布时间】:2015-10-04 09:08:27 【问题描述】:

当我尝试将 XML 文件传输到服务器时出现此错误。

在我的场景中,网页使用 javascript 处理 XML 文件,然后将处理过的 XML 文件上传到 php 服务器。

文件容量为400K。

php.ini

post_max_size = 8M
upload_max_filesize = 2M
memory_limit = 128M

客户端初始请求:

$.ajax(
    type: "GET",
    url: "/dirname/filename.xml",
    dataType: "xml",
    async: false,
    success: function(data)
        xmlCID = data;
    ,
    error: function(jqXHR, textStatus, errorThrown)
        console.log(jqXHR.responseText, textStatus, errorThrown);
        alert(textStatus);
    
);

客户端上传请求

$.ajax(
    url: "/dirname/filename.xml",
    dataType: "xml",
    method: "PUT",
    processData: false,
    data: xmlCID,
    success: function(data)
        console.log(data);
    ,
    error: function(jqXHR, textStatus, errorThrown)
       alert(jqXHR.responseText, textStatus, errorThrown);
    
);

不幸的是,服务器响应是:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>413 - Request Entity Too Large</title>
 </head>
 <body>
  <h1>413 - Request Entity Too Large</h1>
 </body>
</html>

【问题讨论】:

由于您提出问题 40 分钟后没有接受者,所以我要问一个(也许)愚蠢的问题。修改 php.ini 后是否重启了 web 服务器?检查 phpinfo()。 是的,当然。我刚刚通过 phpinfo() 进行了检查。 错误消息很可能来自您的 web-server(不是 PHP)。这意味着您必须检查网络服务器的错误日志并查看导致问题的原因。您应该在其中找到导致错误的更具体的技术描述。 是的,问题出在网络服务器配置文件中。我使用 lighttpd 并且上传目录丢失。 【参考方案1】:

正如 hakre 所指出的,当请求有效负载的大小超出 web 服务器 配置允许的范围时,您经常会收到 PHP 中的设置之外的 413 错误。这些指令因服务器而异,但以下是一些常见的指令(如果您使用托管平台,您可能需要联系主机的支持团队):

Nginx:查看client_max_body_size 指令的nginx.conf (http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size)

Apache:指令LimitRequestBody 可用于httpd.conf 或目录级.htaccess 文件(http://httpd.apache.org/docs/2.4/mod/core.html#limitrequestbody)

IIS:在 IIS6 中查看 maxAllowedContentLengthrequestFiltering > requestLimits 的一部分)或 UploadReadAheadSize(IIS 解决方案非常依赖于版本,所以我d 建议研究一下)。

如果您通过 HTTP 和 HTTPS 提供请求,请确保相关配置适用于两者。

虽然不太常见(在公司网络中更常见),但这也可能与传递请求的其他代理或安全设备有关,因为它们中的每一个都可能有不同的限制影响请求的处理。

如有疑问,请检查日志:首先,确保请求正在到达您的服务器(在访问日志中),如果是,请检查响应代码,然后还要检查错误日志。

希望有帮助!

【讨论】:

是的,问题出在网络服务器配置文件中。我使用 lighttpd 并且上传目录丢失。 很高兴你找到了它,重力!我从未见过此类问题的 413,但我以后在使用 lighthttpd 时必须记住这一点。

以上是关于PHP 413(请求实体太大)的主要内容,如果未能解决你的问题,请参考以下文章

响应:413 请求实体太大

413请求实体太大

maxReceivedMessageSize 未修复 413:请求实体太大

(413) 使用 WCF 请求实体太大错误

413 请求实体太大 IIS 10

413 请求实体太大 nginx django