2009-07-09 14 views
37

Guardandomi intorno, non posso nominare una singola applicazione web (non un servizio web) che usa qualcosa oltre alle richieste GET e POST. C'è una ragione specifica per questo? Alcuni browser (o server) non supportano altri tipi di richieste? O è solo per ragioni storiche? Mi piacerebbe fare uso delle richieste PUT e DELETE per rendere la mia vita un po 'più semplice sul lato server, ma sono riluttante a farlo perché nessun altro lo fa.C'è qualche ragione per non usare HTTP PUT e DELETE in un'applicazione web?

risposta

39

In realtà un buon numero di persone utilizza PUT e DELETE, principalmente per API non di browser. Alcuni esempi sono l'editoria protocollo Atom e le API di Google dati:

Oltre a ciò, non si vede PUT/DELETE nell'uso comune perché la maggior parte dei browser non lo fanno supporta PUT e DELETE tramite Forms. HTML5 sembra essere la risoluzione di questo:

Il modo in cui funziona per le applicazioni del browser è: la gente progettare applicazioni RESTful con PUT e DELETE in mente, poi "tunnel" tali richieste attraverso posti dal browser. Ad esempio, vedere questa domanda SO su come Ruby on Rails compie questo utilizzando campi nascosti:

Quindi, non sarebbe da soli progettare l'applicazione con la più grande serie di HTTP verbi in mente.

MODIFICA: A proposito, se sei curioso di sapere perché PUT/DELETE mancano dai post dei moduli basati su browser, risulta che non esiste un vero motivo tecnico. Leggendo in giro questa discussione sulla mailing list di riposo discutere, soprattutto i commenti di Roy Fielding, è interessante per un certo contesto:

EDIT: Ci sono alcuni commenti su se librerie AJAX supportano tutti i metodi . Arriva all'attuale implementazione del browser di XMLHttpRequest. Ho pensato che qualcuno potrebbe trovare questo link a portata di mano, che mette alla prova il tuo browser per vedere quanto sia rispettoso l'oggetto HttpRequest con varie opzioni HTTP.

Purtroppo, non so di un riferimento che raccoglie questi risultati.

+6

Indovina cosa? nell'ultima versione (19 ottobre 2010) il supporto PUT/DELETE in HTML5 sembra essere rimosso. http://www.w3.org/TR/html5/forms.html#form-submission-0 –

+0

@Xie: trovare interessante. Sembra controproducente per me ... –

3

Alcuni server proxy con criteri di sicurezza difficili potrebbero rilasciarli. Sto usando PUT e DELETE comunque.

3

Ho letto che alcuni browser non supportano correttamente altri metodi HTTP, anche se non posso nominare alcuno specifico.

Rails, in particolare, impacchetta i moduli con un parametro metodo per impostarlo in modo esplicito anche se il browser non supporta tali metodi. Sembra una precauzione ragionevole se hai intenzione di farlo.

9

Molto semplicemente, l'HTML 4.01 form element permette solo i valori "POST" e "GET" nella sua method attributo

+0

Hmm, avrebbe senso ... Ma questo non si applica alle richieste Ajax, giusto? Posso usare qualsiasi metodo che voglio? –

+0

Se il browser è stato creato con le specifiche HTML 4.01, non comprenderà nulla oltre alle specifiche. Questo è tutto quello che si può supporre che un browser possa fare – Gareth

+3

I browser di solito sono costruiti con più di una specifica HTML - JavaScript non fa parte di HTML 4.01. – aehlke

0

Questo dipende dal vostro browser e libreria Ajax. Ad esempio jQuery supporta tutti i metodi HTTP anche se il browser non può. Vedi ad esempio lo jQuery "ajax" documentation sull'attributo "type".

Il framework Restlet consente di eseguire il tunneling di richieste PUT e DELETE tramite operazioni POST HTML. Per fare questo, si aggiunge solo method = mettere o il metodo = cancella alla tua stringa di query URI, ad esempio:

http://www.example.com/user=xyz?method=delete ... 

Questa è la stessa Ruby on Rails approccio (come descritto da @ars sopra).

+2

Dalla documentazione di jQuery: "È possibile utilizzare anche altri metodi di richiesta HTTP, come PUT e DELETE, ma non sono supportati da tutti i browser." Quindi ti sbagli. –

1

Dico usare tutte le funzionalità di HTTP, i browser sono dannati, lol. Forse ispirerà un utilizzo più completo e corretto del protocollo HTTP andando avanti. C'è di più in corso sulla rete di soli POST e GET. A proposito di implementazioni del browser tempo riflette questo.

+0

Haha, vorrei. Sfortunatamente non penso che rendere la mia applicazione web * non funzionante * farà qualcosa oltre a far arrabbiare i miei utenti. :) –

+0

hmmm ... sì, suppongo che tu abbia un punto. vabbè, è stata una bella idea. – codemonkey

+2

ma aspetta ... funziona per microsoft ... – codemonkey

0

Personalmente, in realtà non vedo alcuno scopo per l'uso di PUT o DELETE in un'applicazione web. Tutte le operazioni eseguite da un'applicazione vengono lette o scritte, ovvero output di input. Perché è necessario distinguere la natura dell'operazione nell'intestazione della richiesta HTTP? Potrei effettuare chiamate ajax con lo stesso URL di form/object/object_id e fare più operazioni come eliminare, aggiornare, ottenere il valore o creare. Solo guardando l'URL, non ho idea di quale sia. Utilizzando GET e POST solo, i miei URL saranno:

/oggetto/id/delete

/oggetto/id/creare

/oggetto/id/aggiornamento

/oggetto/id - GET> implicita

ecc

sulla base della mia esperienza limitata, questo è molto più pulito di tipi di richiesta di intestazione nascosti in molti casi. Non sto dicendo che non si dovrebbe mai usare PUT o DELETE, solo dicendo, usali solo se assolutamente necessario.

Fare riferimento a "API Web RESTful" di Leonard Richardson per ulteriori informazioni su diversi casi d'uso e convenzioni riguardanti i metodi di richiesta HTTP in un web API RESTful.

Problemi correlati