2010-01-03 20 views
5

E 'cattiva pratica di rilasciare la seguente richiesta POST:HTTP GET e POST parametri raccomandazioni

/test?a=1&b=2 
POST data: c=3&d=4 

noti che 2 parametri sono parte dell'URL e 2 parametri sono parte del contenuto POST.

In un'altra nota, è la seguente regola ancora consigliata: richiesta

  • GET: recuperare il contenuto di server ma non cambia nulla sul server.
  • richiesta POST: inviare contenuto al server che può modificare i dati sul server

sto chiedendo perché vedo un po 'di tutto in linea.

Laurent Luce

+1

Sì, le persone credono ancora che si dovrebbe usare 'POST's per tutto ciò che può modificare i dati, ma * I * continuo a pensare che sia un carico di cr ap. Questo ti porta a fare cose davvero pericolose quando tutto ciò che vuoi è un semplice link Elimina. Penso che finché avrai dei controlli adeguati sul lato server in modo che i webcrawler non rovinino il tuo sito e così, non è un grosso problema. – mpen

+1

Inoltre, mescolare i metodi dei parametri va bene, ma non so davvero perché lo faresti. Da un punto di vista della programmazione, ha più senso essere coerenti. L'unica eccezione che posso pensare è per i moduli di accesso, a volte si desidera reindirizzare alla pagina di accesso e quindi si gira il collegamento redirect_back_to_this_page in GET e non è necessario copiare il punto nel modulo. – mpen

risposta

6

Sì, le ipotesi sono corrette. Si dovrebbe essere coerenti su come si passano i parametri o si richiedono i parametri da passare, ma in realtà non causerà alcun danno.

Le operazioni GET devono essere operazioni sicure, che non comportano effetti collaterali (oltre al caching, ecc.), Quindi sono facilmente memorizzate nella cache da proxy e così via. D'altra parte le operazioni POST possono incidere sugli effetti collaterali.

Mi raccomando di leggere la Wikipedia entry on HTTP protocol:

GET

chiede una rappresentazione della risorsa specificata. Si noti che GET non deve essere utilizzato per operazioni che causano effetti collaterali, come il suo utilizzo per l'esecuzione di azioni nelle applicazioni Web. Una ragione per questo è che GET può essere usato arbitrariamente da robot o crawler, che non dovrebbero considerare gli effetti collaterali che una richiesta dovrebbe causare. Vedi i metodi sicuri di seguito.

POST

dati sostiene da elaborare (ad esempio, da un modulo HTML) alla risorsa identificata. I dati sono inclusi nel corpo della richiesta. Ciò potrebbe comportare la creazione di una nuova risorsa o gli aggiornamenti di risorse esistenti o entrambi.

Ci sono anche altre operazioni (ad esempio HEAD, PUT, DELETE) e dovresti considerare di utilizzarle se stai progettando un'API. Questi sono molto discussi nella progettazione dell'API RESTful.

1

Non c'è niente di sbagliato in questo. La ragione per la modifica dei dati deve essere inviata nel POST, è che non si dovrà modificare i dati se l'utente ha fatto clic sul pulsante Aggiorna. In tal caso, verranno inviate solo le informazioni GET.

+1

Se la persona raggiunge l'aggiornamento, e l'ultima operazione è stata un POST (come in questa richiesta), sarà comunque molto probabile ripetere l'operazione di post. A meno che il server non invii un reindirizzamento a un'operazione GET. – notnoop

+1

probabilmente intendeva il bookmarking/indicizzato dai motori di ricerca. Davvero non vuoi che le richieste di modifica dei dati vengano indicizzate ... –

3

Questa regola è sicuramente ancora raccomandata.

Si riflette nel comportamento di aggiornamento dei browser moderni. Questi si aggiorneranno felicemente con i valori GET, ma appariranno una finestra di avviso su un aggiornamento di un POST ('sei sicuro di voler inviare nuovamente?' Ecc.).

Sembra che stavate cercando di combinare i due metodi (GET e POST) ..eseguendo il POST a un URL con valori GET. Mentre questo dovrebbe funzionare bene, non è comunemente fatto. Le forme di solito usano esclusivamente l'una o l'altra.

2

Sì, la semantica di GET e POST deve essere rispettata.

Dato questo fatto, allora v'è spesso una buona ragione per mettere alcuni parametri in GET e alcuni nel POST Vars - prendere in considerazione il caso in cui si dispone di uno script basato sul web che fa qualcosa di simile:

UPDATE datatable SET quantity=30 WHERE order=21559 

Questo potrebbe essere rappresentato come:

/update?order=21559 
POST data: quantity=30 

C.

Problemi correlati