2013-04-19 2 views
1

Части моего сайта принимает изображение из холста HTML5 с использованием метода413 Request Entity Too Large при передаче данных изображений

.toDataURL() 

, а затем отправляет исходные данные как часть сообщения в POST на мой сервер, с AJAX. На стороне сервера у меня есть скрипт cgi, ожидающий длинную строку данных. Я постоянно получаю эту ошибку:

413 (Request Entity Too Large) 

Я использую библиотеку Perl CGI, и я не имею

$CGI::POST_MAX 

набор или

$CGI::DISABLE_UPLOADS 

набор. Это связано с ограничениями, установленными на сервере? Я использую apache и nginx в качестве прокси-сервера. Мое беспокойство заключается в том, что я не смогу обойти эту проблему, так как я пишу свой сайт для установки на сервере с Bluehost. В основном у меня есть два вопроса: 1. Есть ли способ использовать метод холста html5 для создания запроса на отправку типа файла на сервер? 2. Есть ли способ обойти эту ошибку 413, которая не связана с использованием конфигурации Apache/Nginx (или некоторых других серверов)?

+0

Начать определение, является ли ваш сценарий или сервер причиной возникновения ошибки. – ikegami

+1

Если у вас нет набора '$ CGI :: POST_MAX', тогда ошибка происходит либо из Apache, либо из Nginx. Насколько велик организм? Если он находится в пределах нескольких мегабайт, я отправил бы адрес электронной почты поставщику и попросил бы установить лимит на что-то разумное. – chansen

+0

И, поскольку у вас есть два сервера, выясните, какой сервер он отправляет rror. Проверьте журналы ошибок. Также, пожалуйста, напишите свой почтовый код javascript. –

ответ

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/; 
     } 
    } 
} 
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.

Смежные вопросы