2013-04-19 67 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字符串。