C'è mai una situazione in cui sia corretto avviare un Elimina su GET?

2

Quando si crea una semplice applicazione Web con funzionalità di eliminazione del database, normalmente si eseguono i seguenti passaggi:

  1. L'utente avvia una richiesta GET utilizzando un collegamento di eliminazione
  2. L'utente conferma la cancellazione
  3. Alla conferma, il browser avvia una richiesta POST al server per eseguire la cancellazione

Quali sono le ragioni di questa convention? Capisco che stabilisca una fase di conferma che impedirebbe la chiamata automatica della funzione di cancellazione (come con gli spider e così via) - ci sono altri motivi?

    
posta morganpdx 09.03.2011 - 23:56
fonte

3 risposte

13

Per convenzione, si presume sempre che le richieste di GET siano non distruttive . Se fai cose distruttive tramite GET (non solo eliminando materiale, ma anche aggiungendo o modificando il contenuto), ogni volta che Google va ad indicizzare il tuo sito (e lo fa pubblicando GET s su tutte le tue pagine) e alcuni di questi GET s eliminano il contenuto, quindi elimineresti metà del tuo database ogni volta che il tuo sito è stato indicizzato.

Ricordo una storia in cui uno sviluppatore aveva scritto uno script per eseguire la scansione di un sito intranet interno. L'ha lasciata in funzione durante la notte e tornò al mattino per scoprire che tutte le foto che gli utenti avevano caricato erano state trasformate in qualche strana immagine casuale in qualche modo. È venuto fuori che qualcuno aveva permesso di cambiare le foto tramite una richiesta di GET e il suo script aveva esaminato tutti quelli dell'intera intranet!

    
risposta data 10.03.2011 - 00:11
fonte
3

Non c'è mai una situazione in cui sia corretto avviare un Elimina su GET. È pessima pratica utilizzare GET per modificare o eliminare. Vedi 9.1.1. delle specifiche HTTP, dove afferma chiaramente " la convenzione è stata stabilita che i metodi GET e HEAD NON DEVONO avere l'importanza di intraprendere un'azione diversa dal recupero. "

Il metodo DELETE richiede che il server di origine elimini la risorsa identificata dall'URI di richiesta .

Quindi potresti utilizzare POST o DELETE , tranne per il fatto che l'utilizzo di DELETE non è così comune ed è davvero progettato per funzionare con PUT .

    
risposta data 10.03.2011 - 00:18
fonte
2

Un ottimo motivo per non utilizzare un GET per la cancellazione: c'era un sito Web che funzionava benissimo fino a quando i motori di ricerca non lo scansionavano e facevano clic su tutti i link, compresi i link "elimina oggetto". Ci è voluto un po 'di tempo prima che lo sviluppatore lo scoprisse, poi ci è voluto un po' per togliersi l'impronta dalla fronte!

    
risposta data 10.03.2011 - 00:21
fonte

Leggi altre domande sui tag