2015-07-29 10 views
5

La mia app Android sta effettuando due chiamate GET alla mia Server API. Nel primo, è questo, dove il parametro code è una stringa da 256 caratteri.Limite di lunghezza sui parametri JSON sulla richiesta GET

$.getJSON(myServerEndpoint, { 
    action: "doStuff1", 
    username: $("#username").val(), 
    code: my256charString, 
    format: "json" 
}) 
.done(function(data) { 
    doStuff2Response(data); 
}); 

Il secondo è questo, in cui il parametro è una stringa code 5120 char. Entrambi raggiungono lo stesso endpoint del server.

$.getJSON(myServerEndpoint, { 
    action: "doStuff2", 
    username: $("#username").val(), 
    code: my5120CharString, 
    format: "json" 
}) 
.done(function(data) { 
    doStuff2Response(data); 
}); 

Quando chiamo entrambi dallo stesso dispositivo e stesso utente collegato al WiFi o maggior parte dei provider di dati mobili, funziona perfettamente.

Tuttavia, quando mi collego da una connessione dati Vodafone, la seconda richiesta non raggiunge mai il server. Non riesco a trovare altre spiegazioni di quella che c'è un limite alla lunghezza dei parametri con Vodafone.

Qualche idea o soluzione?

+0

Sei interessato a una possibile soluzione o semplicemente alla spiegazione del motivo per cui non funziona? – Carlos

+0

Idealmente entrambi :) – Arturo

+1

Idea! Non una risposta! Scrivi un ciclo che fa '$ .getJSON (... codice: strLength (i ++), formato:" json " })' ciclo 5000 volte, e guarda quando i colpi si fermano sul tuo server –

risposta

7

OK, quindi ecco qui. Per prima cosa, leggi questo: What is the maximum length of a URL in different browsers?

Sì, c'è un limite nella lunghezza dell '"URL", ma in qualche modo non so come spiegare perché sta accadendo solo per vodafone. Inoltre, non so nemmeno come la richiesta passi attraverso i loro server comunque.

Per quanto riguarda la soluzione, è consigliabile passare dalla richiesta GET alla richiesta POST quando il carico utile è troppo grande.

1

Soluzione rapida: Base64-codifica la parte code del messaggio. Lato negativo: devi decodificare sul server. Questa è una funzione standard nella maggior parte delle lingue però.

Se stai già utilizzando Base64 o somesuch cypher, che dire di Blobs? https://developer.mozilla.org/en-US/docs/Web/API/Blob

Il suggerimento di chromano è azzeccato, basta passare al POST e otterrete sicuramente un Post Body illimitato. Lato negativo: devi JSON.stringify e JSON.parse per te stesso e se vuoi esporre questo URL a un utente (ad esempio come un link per condividerlo), ora non può portare le stesse informazioni (le richieste di GET sono URL).

Problemi correlati