2008-09-24 25 views
8

Existe-t-il un maximum documenté de la longueur des données de chaîne que vous pouvez utiliser dans la méthode send d'un XMLHttpRequest pour les principales implémentations de navigateur?Longueur max du paramètre de données send() XMLHttpRequest Post

Je rencontre un problème avec un JavaScript XMLHttpRequest Post échouant dans FireFox 3 lorsque les données sont sur environ 3k. Je supposais que le Post se comporterait de la même manière qu'un Post Formulaire conventionnel.

Le document W3C mentionne que le paramètre data de la méthode send est un DOMString mais je ne suis pas sûr de savoir comment les principaux navigateurs implémentent cela.

Voici une version simplifiée de mon JavaScript, si bigText est sur environ 3k elle échoue, sinon il 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; 
     } 
    } 
} 

Répondre

5

je crois que la longueur maximale dépend non seulement du navigateur, mais aussi le serveur web. Par exemple, le serveur HTTP Apache a un LimitRequestBody directive qui autorise entre 0 octet et 2 Go de données.

2

Selon le XMLRPC spec, les seules vraies limites sont sur la taille des entiers et des doubles.

2

Vous ne spécifiez pas comment cela échoue, mais votre encodage est incorrect. Vous devriez utiliser encodeURIComponent pas encodeURI.

Par défaut, la taille maximale du corps d'entité de requête sur le client est probablement limitée uniquement par la mémoire disponible. Le serveur, comme cela a déjà été indiqué, peut rejeter des corps d'entité sur une certaine taille. IIS 6 et 7 ont par exemple une limite par défaut de 200 Ko.