Pregunta

¿Existe una longitud máxima documentada de los datos de cadena que puede usar en el método de envío de XMLHttpRequest para las principales implementaciones del navegador?

Me encuentro con un problema con una publicación XMLHttpRequest de JavaScript que falla en FireFox 3 cuando los datos superan aproximadamente los 3k.Supuse que la publicación se comportaría igual que una publicación de formulario convencional.

Los documentos del W3C mencionan que el parámetro de datos del método de envío es un DOMString, pero no estoy seguro de cómo lo implementan los principales navegadores.

Aquí hay una versión simplificada de mi JavaScript, si bigText supera los 3k, falla; de lo contrario, funciona...

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;
        }
    } 
}
¿Fue útil?

Solución

Creo que la longitud máxima depende no sólo del navegador, sino también del servidor web.Por ejemplo, el servidor HTTP Apache tiene un Directiva LimitRequestBody lo que permite desde 0 bytes hasta 2 GB de datos.

Otros consejos

De acuerdo con la especificación XMLRPC, los únicos límites reales están en el tamaño de los números enteros y dobles.

No especifica cómo falla, sin embargo, su codificación es incorrecta.Deberías usar encodeURIComponent, no encodeURI.

Es probable que el tamaño máximo predeterminado del cuerpo de la entidad de solicitud en el cliente solo esté limitado por la memoria disponible.El servidor, como ya se ha señalado, puede rechazar cuerpos de entidades que superen un cierto tamaño.IIS 6 y 7, por ejemplo, tienen un límite predeterminado de 200 KB.

La configuración para Nginx debe realizarse en el client_max_body_size y se puede establecer en cualquier valor, es decir20 m para 20 MiB o configúrelo en 0 para desactivarlo.

vim /etc/nginx/nginx.conf

Guarde y cierre el archivo, aplique los cambios a nginx.conf, luego pruebe -t y envíe la señal -s para recargar:

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

Sintaxis:client_max_body_size tamaño;

Por defecto:client_max_body_size 1m;

Contexto:http, servidor, ubicación

Establece el tamaño máximo permitido del cuerpo de la solicitud del cliente, especificado en el campo del encabezado de la solicitud "Longitud del contenido".Si el tamaño de una solicitud excede el valor configurado, se devuelve al cliente el error 413 (Entidad de solicitud demasiado grande).Tenga en cuenta que los navegadores no pueden mostrar correctamente este error.Establecer el tamaño en 0 deshabilita la verificación del tamaño del cuerpo de la solicitud del cliente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top