Domanda

Esiste un limite massimo documentato per la lunghezza dei dati della stringa che è possibile utilizzare nel metodo di invio di un XMLHttpRequest per le principali implementazioni del browser?

Sto riscontrando un problema con un JavaScript XMLHttpRequest Post che non ha funzionato in FireFox 3 quando i dati superano circa 3k. Pensavo che il Post si sarebbe comportato come un Post Form convenzionale.

I documenti del W3C menzionano il parametro di dati del metodo di invio è un DOMString ma non sono sicuro di come i principali browser lo implementino.

Ecco una versione semplificata del mio JavaScript, se bigText supera i 3k non riesce, altrimenti funziona ...

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;
        }
    } 
}
È stato utile?

Soluzione

Credo che la lunghezza massima dipenda non solo dal browser, ma anche dal server web. Ad esempio, il server HTTP Apache ha una Direttiva LimitRequestBody che consente ovunque da 0 byte a 2 GB di dati.

Altri suggerimenti

Secondo le specifiche XMLRPC , gli unici limiti reali riguardano le dimensioni di numeri interi e doppi.

Non specifichi come fallisce, tuttavia la tua codifica non è corretta. È necessario utilizzare encodeURIComponent non encodeURI.

L'impostazione predefinita della dimensione massima del corpo dell'entità richiesta sul client è probabilmente limitata solo dalla memoria disponibile. Il server, come è già stato sottolineato, può rifiutare corpi di entità superiori a una determinata dimensione. IIS 6 e 7, ad esempio, hanno un limite predefinito di 200 KB.

La configurazione per Nginx deve essere effettuata su client_max_body_size e può essere impostato su qualsiasi valore, ad es. 20m per 20 MiB o impostato su 0 per disabilitarlo.

vim /etc/nginx/nginx.conf

Salvare e chiudere il file, applicare le modifiche a nginx.conf, quindi testare -t e inviare i segnali -s per ricaricare:

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

Sintassi: client_max_body_size size;

Predefinito: client_max_body_size 1m;

Contesto: http, server, posizione

Imposta la dimensione massima consentita per il corpo della richiesta client, specificata nel campo di intestazione della richiesta "Lunghezza contenuto". Se la dimensione in una richiesta supera il valore configurato, l'errore 413 (Richiesta entità troppo grande) viene restituito al client. Si noti che i browser non possono visualizzare correttamente questo errore. L'impostazione della dimensione su 0 disabilita il controllo della dimensione del corpo della richiesta client.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top