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

StackOverflow https://stackoverflow.com/questions/124742

  •  02-07-2019
  •  | 
  •  

Вопрос

Существует ли документированная максимальная длина строковых данных, которые вы можете использовать в методе отправки 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;
        }
    } 
}
Это было полезно?

Решение

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

Другие советы

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

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

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

Настройка для Nginx должна быть выполнена на клиент_макс_боди_размер и может быть установлено любое значение, т.е.20m для 20MiB или установите значение 0, чтобы отключить его.

vim /etc/nginx/nginx.conf

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top