Question

Existe-t-il une limite maximale documentée à la longueur des données de chaîne que vous pouvez utiliser dans la méthode d'envoi d'un XMLHttpRequest pour les principales implémentations de navigateur?

Je rencontre un problème avec une publication JavaScript XMLHttpRequest qui échoue dans FireFox 3 lorsque les données dépassent environ 3k. Je pensais que la poste se comporterait de la même manière qu’une forme classique.

Les documents du W3C mentionnent que le paramètre data de la méthode send est une chaîne DOMString mais je ne suis pas sûr de la manière dont les principaux navigateurs l'implémentent.

Voici une version simplifiée de mon JavaScript. Si bigText est dépassé, environ 3k, il échoue, sinon cela fonctionne ...

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;
        }
    } 
}
Était-ce utile?

La solution

Je pense que la longueur maximale dépend non seulement du navigateur, mais également du serveur Web. Par exemple, le serveur HTTP Apache a une directive LimitRequestBody qui permet de 0 octet à 2 Go de données.

Autres conseils

Selon la spécification XMLRPC , les seules limites réelles concernent la taille des entiers et des doubles.

Vous ne précisez pas comment cela échoue, mais votre codage est incorrect. Vous devez utiliser encodeURIComponent not encodeURI.

Par défaut, la taille maximale du corps de l'entité de demande sur le client est probablement limitée uniquement par la mémoire disponible. Comme indiqué précédemment, le serveur peut rejeter des corps d'entité dépassant une certaine taille. IIS 6 et 7, par exemple, ont une limite par défaut de 200 Ko.

La configuration de Nginx doit être effectuée à la client_max_body_size . ca peut être réglé sur n’importe quelle valeur, par exemple 20 m pour 20 Mo ou 0 pour le désactiver.

vim /etc/nginx/nginx.conf

Enregistrez et fermez le fichier, appliquez les modifications à nginx.conf, puis testez -t et envoyez le signal -s à recharger:

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

Syntaxe: client_max_body_size size;

Par défaut: client_max_body_size 1m;

Contexte: http, serveur, emplacement

Définit la taille maximale autorisée du corps de la demande du client, spécifiée dans le champ d'en-tête de demande «Content-Length». Si la taille d'une requête dépasse la valeur configurée, l'erreur 413 (Request Entity Too Large) est renvoyée au client. Veuillez noter que les navigateurs ne peuvent pas afficher correctement cette erreur. Définir la taille sur 0 désactive la vérification de la taille du corps de la demande du client.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top