413发送图像数据时请求实体太大

时间:2013-04-19 03:00:14

标签: html5 perl apache nginx

我网站的一部分使用方法

从HTML5画布中获取图像
 .toDataURL()

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

 413 (Request Entity Too Large) 

我使用的是perl CGI库,而我没有

 $CGI::POST_MAX 

设置或

  $CGI::DISABLE_UPLOADS

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

2 个答案:

答案 0 :(得分:3)

此错误是由太长的网址引起的。

虽然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字符串。

答案 1 :(得分:2)

如果您尝试上传时出现413请求实体太大错误,则需要增加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/;
        }
    }
}