【问题标题】:413 Request Entity Too Large when sending image data413 Request Entity Too Large 发送图像数据时
【发布时间】:2025-12-20 21:35:06
【问题描述】:

我网站的一部分使用该方法从 HTML5 画布中获取图像

 .toDataURL()

然后使用 AJAX 将原始数据作为 POST 消息的一部分发送到我的服务器。 在服务器端,我有一个需要长数据字符串的 cgi 脚本。 我一直收到此错误:

 413 (Request Entity Too Large) 

我正在使用 perl CGI 库,但我没有

 $CGI::POST_MAX 

设置,或

  $CGI::DISABLE_UPLOADS

设置。 这是由于服务器中设置的限制吗?我正在使用 apache 和 nginx 作为代理服务器。我担心我无法解决这个问题,因为我正在编写要安装在 bluehost 服务器上的站点。基本上我有两个问题: 1.有没有办法使用html5画布方法创建文件上传类型的post请求到服务器? 2. 有什么方法可以解决这个 413 错误而不涉及弄乱 Apache/Nginx(或其他一些服务器)配置?

【问题讨论】:

  • 首先确定是您的脚本还是服务器产生了错误。
  • 如果您没有设置$CGI::POST_MAX,则错误来自 Apache 或 Nginx。身体有多大?如果它在几兆字节以内,我会向提供商发送电子邮件并要求他们将限制设置为合理的值。
  • 而且,由于您有两台服务器,请找出发送错误的服务器。检查错误日志。另外,请发布您的 javascript POST 代码。

标签: html perl apache nginx


【解决方案1】:

如果您在尝试上传时遇到 413 Request Entity Too Large 错误,您需要增加 nginx.conf 或任何其他配置文件中的大小限制。在服务器部分添加client_max_body_size xxM,其中xx 是您希望允许的大小(以兆字节为单位)。

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        client_max_body_size 20M;
        listen       80;
        server_name  localhost;

        # Main location
        location / {
            proxy_pass         http://127.0.0.1:8000/;
        }
    }
}

【讨论】:

    【解决方案2】:

    此错误是由于 URL 太长造成的。

    虽然官方对 URL 的长度没有限制,但实际上浏览器和服务器有限制。

    The maximum safe length for browsers is about 2000 characters。这是旧版本 Internet Explorer 的限制。我认为最新版本的 IE 允许大约 4000,但 Chrome 限制在大约 2000,even though Google generates URLs longer than that

    The maximum length for servers varies 通过服务器。

    因此,如果您的数据超出此范围,您可能需要想出另一种发送方式,而不是将其转换为 URL 字符串。

    【讨论】:

    • 那个人说是POST