Come indicato in http://www.boutell.com/newfaq/misc/urllength.html, la stringa di query HTTP ha una lunghezza limitata. Può essere limitato dal client (Firefox, IE, ...), dal server (Apache, IIS, ...) o dall'apparecchiatura di rete (firewall applicativo, ...).Come posso gestire i limiti di lunghezza della stringa di query HTTP GET e voglio comunque essere RESTful?
Oggi devo affrontare questo problema con un modulo di ricerca. Abbiamo sviluppato un modulo di ricerca con molti campi e questo modulo è stato inviato al server come richiesta GET, quindi posso aggiungere la pagina risultante ai segnalibri.
Abbiamo così tanti campi che la nostra stringa di query è lunga 1100 byte e abbiamo un firewall che elimina le richieste HTTP GET con più di 1024 byte. Il nostro amministratore di sistema ci consiglia di utilizzare il POST, quindi non ci saranno limiti.
Certo, il POST funzionerà, ma sento davvero una ricerca come GET e non un POST. Quindi penso che rivedrò i nostri nomi dei campi per assicurarmi che la stringa di query non sia troppo lunga, e se non posso essere pragmatico e usare POST.
Ma c'è un difetto nella progettazione dei servizi RESTful? Se abbiamo una lunghezza limitata nella richiesta GET, come posso fare per inviare oggetti di grandi dimensioni a un webservice RESTful? Ad esempio, se ho un programma che fa calcoli basati su un file, e voglio fornire un servizio web RESTful come questo: http://compute.com?content=<base64 file>
. Questo non funzionerà perché la stringa di query non ha una lunghezza illimitata.
Sono un po 'perplesso ...
Cosa significa "riposante" nei termini del tuo contesto? O parafrasando: perché GET è riposante e POST no? Perché GET può essere costruito usando una semplice concatenazione di stringhe? La limitazione della lunghezza della query consiste nell'evitare l'allocazione dinamica della memoria nelle app destinate a funzionare rapidamente. – khachik
Quando voglio fare una ricerca, non voglio creare, eliminare o aggiornare qualcosa, voglio solo recuperare i dati, quindi non dovrei usare POST, DELETE o PUT, e dovrei usare GET.Questo è il modo in cui ho capito REST, ma potrei sbagliarmi a riguardo. – cbliard
GET non è adatto per la ricerca, perché i risultati di una ricerca possono cambiare nel tempo. L'infrastruttura Web consente spesso il caching delle richieste GET. Se utilizzi GET rischi di ottenere risultati obsoleti per le ricerche. Il POST è il modo, come raccomandato di seguito. – occulus