Максимальная длина параметра данных send() для XMLHttpRequest Post
-
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 отключает проверку размера тела клиентского запроса.