Максимальная длина параметра данных send () в сообщении XMLHttpRequest - PullRequest
9 голосов
/ 24 сентября 2008

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

У меня проблема с сообщением JavaScript XMLHttpRequest, которое перестало работать в FireFox 3, если объем данных превышает 3 КБ. Я предполагал, что сообщение будет вести себя так же, как обычное сообщение формы.

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

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

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

Ответы [ 4 ]

5 голосов
/ 24 сентября 2008

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

2 голосов
/ 25 сентября 2008

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

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

2 голосов
/ 24 сентября 2008

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

0 голосов
/ 27 января 2019

Конфигурация для 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 (Request Entity Too Large). Помните, что браузеры не могут правильно отображать эту ошибку. Установка размера 0 отключает проверку размера тела клиентского запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...