Максимальная длина параметра данных send() в сообщении XMLHttpRequest

Есть ли задокументированная максимальная длина строковых данных, которую вы можете использовать в методе отправки XMLHttpRequest для основных реализаций браузера?

Я столкнулся с проблемой с ошибкой JavaScript XMLHttpRequest Post в FireFox 3, когда данные превышают примерно 3 КБ. Я предполагал, что Post будет вести себя так же, как и обычный Form Post.

В документах W3C упоминается, что параметром данных метода отправки является DOMString, но я не уверен, как это реализуют основные браузеры.

Вот упрощенная версия моего JavaScript, если размер bigText превышает 3k, он не работает, в противном случае он работает...

var xhReq = createXMLHttpRequest();

function createXMLHttpRequest() {
  try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
  try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
  try { return new XMLHttpRequest(); } catch(e) {}
  alert("XMLHttpRequest not supported");
  return null;
}

function mySubmit(id, bigText) {
  var url    = "SubmitPost.cfm";
  var params = "id=" + id + "&bigtext=" + encodeURI(bigText);

  xhReq.open("POST", url, true);

  //Send the header information along with the request
  xhReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhReq.setRequestHeader("Content-length", params.length);
  xhReq.setRequestHeader("Connection", "close");

  xhReq.onreadystatechange = onPostSubmit;
  xhReq.send(params);
}

function onPostSubmit() {

  if (xhReq.readyState==4 || xhReq.readyState=="complete")
     { 
     if (xhReq.status != 200)
        {
        alert('BadStatus');
        return;
        }
    } 
}

person kevink    schedule 24.09.2008    source источник


Ответы (4)


Я считаю, что максимальная длина зависит не только от браузера, но и от веб-сервера. Например, HTTP-сервер Apache имеет директиву LimitRequestBody, которая позволяет от 0 байт до 2 ГБ данных.

person Zack The Human    schedule 24.09.2008
comment
да, источник здесь http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestbody - person Anja Ishmukhametova; 19.05.2020

Согласно спецификации XMLRPC, единственными реальными ограничениями являются размеры целых и двойных чисел.

person Chris AtLee    schedule 24.09.2008

Вы не указываете, как это терпит неудачу, однако ваша кодировка неверна. Вы должны использовать encodeURIComponent, а не encodeURI.

По умолчанию максимальный размер тела объекта запроса на клиенте, скорее всего, ограничен только доступной памятью. Сервер, как уже было указано, может отклонять тела сущностей, превышающие определенный размер. IIS 6 и 7, например, имеют ограничение по умолчанию 200 КБ.

person AnthonyWJones    schedule 25.09.2008

Конфигурация для Nginx должна быть выполнена в client_max_body_size и может быть установлена на любое значение, т. е. 20 м для 20 МБ, или установите значение 0, чтобы отключить его.

vim /etc/nginx/nginx.conf

Сохраните и закройте файл, примените изменения к nginx.conf, затем проверьте -t и отправьте сигнал -s для перезагрузки:

/usr/sbin/nginx -t
/usr/sbin/nginx -s reload

Синтаксис: client_max_body_size размер;

По умолчанию: client_max_body_size 1m;

Контекст: http, сервер, местоположение

Устанавливает максимально допустимый размер тела запроса клиента, указанный в поле заголовка запроса «Content-Length». Если размер в запросе превышает настроенное значение, клиенту возвращается ошибка 413 (Слишком большой объект запроса). Имейте в виду, что браузеры не могут корректно отображать эту ошибку. Установка размера в 0 отключает проверку размера тела запроса клиента.

person Yones    schedule 27.01.2019