Domanda

Molte delle mie applicazioni ajax in passato hanno utilizzato la richiesta GET, ma ora sto iniziando a utilizzare la richiesta POST. Le richieste POST sembrano leggermente più sicure e decisamente più amichevoli / belle. Quindi, mi chiedo se c'è qualche motivo per cui dovrei usare la richiesta GET.

È stato utile?

Soluzione

In genere imposto la domanda in questo modo: Qualcosa di importante cambia dopo la richiesta? (nonostante la registrazione e simili). In tal caso, dovrebbe essere una richiesta POST, in caso contrario, dovrebbe essere una richiesta GET.

Sono lieto che tu chiami richieste POST "leggermente". più sicuri, perché è praticamente quello che sono; è banale falsificare una richiesta POST di un utente su una pagina. Trasformarlo in una richiesta POST, tuttavia, impedisce agli acceleratori Web o alle ricariche di riavviare accidentalmente l'azione.

Come AJAX, c'è un'altra considerazione: se stai restituendo JSON con il supporto di callback, fai molta attenzione a non inserire dati sensibili che non vuoi che altri siti web possano vedere lì. Wikipedia ha avuto una vulnerabilità in questo senso in cui il token anti-CSRF dell'utente è stato rivelato tramite la sua API JSON.

Altri suggerimenti

Dovresti usare GET quando stai facendo una richiesta che non ha effetti collaterali, ad es. cerco solo qualche informazione. Questa richiesta può:

  • Ripeti senza problemi: se il browser rileva un errore, può riprovare silenziosamente
  • Il risultato viene memorizzato nella cache dal browser
  • Essere memorizzati nella cache da un proxy

Queste cose sono tutte buone. Tutto ciò che sta solo recuperando dati (in particolare dati pubblici) dovrebbe davvero essere un OTTENUTO. Il server dovrebbe inviare le ultime modifiche modificate: e scade: le intestazioni per consentire la memorizzazione nella cache, se necessario.

Tutti i punti positivi, tuttavia, in risposta alla domanda, le richieste GET sono più utili in determinati scenari rispetto alle richieste POST:

  1. Possono essere aggiunti ai segnalibri
  2. Possono essere memorizzati nella cache
  3. Sono più veloci
  4. Hanno conseguenze note (supponendo che non modifichino i dati), quindi visitandole più volte i tempi non sono un problema.

Per motivi di posteri, l'aggiornamento di questo commento con le note del blog fa riferimento al punto 3 qui, tutto il merito a Omar AL Zabir (l'autore del riferimento post di blog ):

  

" Atlas per impostazione predefinita effettua HTTP POST per tutte le chiamate AJAX. Http POST è   più costoso di Http GET. Trasmette più byte sul filo,   prendendo così prezioso tempo di rete e fa anche ASP.NET fare di più   elaborazione sul lato server. Quindi, dovresti usare Http Get tanto quanto   possibile. Tuttavia, Http Get non consente di passare oggetti come   parametri. È possibile passare solo numeri, stringhe e date. Quando fai   a Http Ricevi una chiamata, Atlas crea un URL codificato e ci colpisce   url. Quindi, non devi trasmettere troppi contenuti che fanno diventare l'URL   più grande di 2048 caratteri. Per quanto ne so, questo è il massimo   lunghezza di qualsiasi URL.

     

Un'altra cosa cattiva di http post è che in realtà sono 2 chiamate. Primo   il browser invia le intestazioni dei post http e le risposte del server con "HTTP 100   Continua". Quando il browser lo riceve, invia il corpo reale. & Quot;

Questo potrebbe aiutarti a decidere dove utilizzare GET e dove utilizzare POST:

URI, indirizzabilità e utilizzo di HTTP GET e POST .

C'è un'altra differenza non menzionata da nessuno.

Le richieste GET vengono passate nella stringa URL e sono quindi soggette a un limite di lunghezza che di solito dipende dal browser.

Le richieste POST possono essere molto più grandi, di fatto non limitate. Quindi, se hai bisogno di richiedere dati da un server web e stai trasmettendo molte informazioni sui parametri, una richiesta POST potrebbe essere l'unica opzione.

Quindi, come accennato in precedenza, una richiesta GET è per la richiesta di dati (senza effetti collaterali) mentre una richiesta POST viene generalmente utilizzata per la trasmissione di dati al server da archiviare (con effetti collaterali). per esempio. Usa POST per caricare un file. OTTIENI per recuperare un file.

C'è stato un tempo in cui IE credo avesse una stringa URL GET molto breve. Alcune applicazioni come Lotus Notes usano un gran numero di caratteri casuali per rappresentare l'ID del documento. Ho avuto il dispiacere di usare un altro prodotto che ha generato stringhe casuali, quindi l'URL della pagina era unico ogni volta. La stringa casuale era ENORME ... e non sempre funzionava con IE6 dalla memoria.

Le richieste POST sono insicure quanto i GET. La differenza principale è che POST viene utilizzato per modificare lo stato dell'applicazione server, mentre GET richiede solo dati da esso.

La differenza è importante quando usi clean, "restful" " URL, in cui l'URL stesso specifica la risorsa e i diversi metodi attivano azioni diverse sul lato server.

Forse, soprattutto, GET è marcabile / visualizzabile nella cronologia degli URL e può essere ricercato con Google.

Il POST è importante quando non vuoi l'evento deve essere aggiunto ai segnalibri o essere digitato come un URL, altrimenti tu (o Google che esegue la scansione dei tuoi URL) potresti finire per fare accidentalmente cose come eliminando gli utenti dal tuo sistema, ad esempio.

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