2013-04-19 42 views
1

我的网站的一部分从HTML5画布使用该方法413请求实体过大的图像数据发送

.toDataURL() 

拍摄图像,然后发送的原始数据作为POST消息的一部分到我的服务器时,与AJAX。 在服务器端,我有一个期望长数据字符串的cgi脚本。 我一直收到此错误:

413 (Request Entity Too Large) 

我使用Perl CGI库,和我没有

$CGI::POST_MAX 

集,或

$CGI::DISABLE_UPLOADS 

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

+0

从确定它是您的脚本还是生成错误的服务器开始。 – ikegami

+1

如果你没有设置'$ CGI :: POST_MAX',那么错误来自Apache或Nginx。身体有多大?如果它在几兆字节内,我会通过电子邮件向提供商发送电子邮件,并要求他们将限制设置为合理。 – chansen

+0

而且,由于您有两台服务器,请确定它正在发送该错误的服务器。检查错误日志。另外,请发布您的JavaScript POST代码。 –

回答

1

如果您收到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/; 
     } 
    } 
} 
3

此错误是由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字符串。