Domanda

Da quello che posso capire, ci sono tre categorie:

  1. Non usare mai GET e utilizzare POST
  2. Non usare mai POST e utilizzare GET
  3. Non importa quale usi.

Ho ragione nel presupporre questi tre casi?Se sì, quali sono alcuni esempi per ciascun caso?

È stato utile?

Soluzione

Utilizzo POST per azioni distruttive come la creazione (sono consapevole dell'ironia), la modifica e la cancellazione, perché non puoi colpire un POST azione nella barra degli indirizzi del tuo browser.Utilizzo GET quando è sicuro consentire a una persona di richiamare un'azione.Quindi un URL come:

http://myblog.org/admin/posts/delete/357

Dovrebbe portarti a una pagina di conferma, anziché semplicemente eliminare l'elemento.È molto più facile evitare incidenti in questo modo.

POST è anche più sicuro di GET, perché non stai inserendo informazioni in un URL.E così usando GET come il method per un modulo HTML che raccoglie una password o altre informazioni sensibili non è l'idea migliore.

Un'ultima nota: POST può trasmettere una quantità maggiore di informazioni rispetto a GET.'POST' non ha limiti di dimensione per i dati trasmessi, mentre 'GET' è limitato a 2048 caratteri.

Altri suggerimenti

In breve

  • Utilizzo GET per safe andidempotent richieste
  • Utilizzo POST per neither safe nor idempotent richieste

Nei dettagliPer ognuno c'è il posto giusto.Anche se non segui Riposante principi, si può guadagnare molto imparando a conoscere REST e come funziona un approccio orientato alle risorse.

Un'applicazione RESTful lo farà use GETs per operazioni che sono entrambe le cose safe and idempotent.

UN safe l'operazione è un'operazione che fa not change the data richiesto.

UN idempotent l'operazione è quella in cui il risultato sarà be the same non importa quante volte lo richiedi.

È ovvio che, poiché vengono utilizzati i GET sicuro le operazioni vengono eseguite automaticamente idempotente.In genere un GET viene utilizzato per recuperare una risorsa (ad esempio una domanda e le risposte associate sullo stack overflow) o una raccolta di risorse.

Verrà utilizzata un'app RESTful PUTs per le operazioni che sono not safe but idempotent.

So che la domanda riguardava GET e POST, ma tornerò su POST tra un secondo.

In genere un PUT viene utilizzato per modificare una risorsa (ad esempio, modificando una domanda o una risposta sullo stack overflow).

UN POST verrebbe utilizzato per qualsiasi operazione che sia neither safe or idempotent.

In genere un POST verrebbe utilizzato per creare una nuova risorsa, ad esempio creando una NUOVA domanda SO (anche se in alcuni progetti verrebbe utilizzato anche un PUT per questo).

Se esegui il POST due volte finirai per creare DUE nuove domande.

C'è anche un'operazione DELETE, ma immagino di poterla lasciare lì :)

Discussione

In termini pratici, i browser Web moderni in genere supportano solo GET e POST in modo affidabile (puoi eseguire tutte queste operazioni tramite chiamate javascript, ma in termini di inserimento di dati nei moduli e pressione di invio generalmente hai due opzioni).In un'applicazione RESTful il POST verrà spesso sovrascritto per fornire anche le chiamate PUT e DELETE.

Ma, anche se non si seguono i principi RESTful, può essere utile pensare in termini di utilizzo di GET per recuperare/visualizzare informazioni e POST per creare/modificare informazioni.

Non dovresti mai usare GET per un'operazione che altera i dati.Se un motore di ricerca esegue la scansione di un collegamento alla tua operazione malvagia o il client lo aggiunge ai segnalibri, potrebbero verificarsi grossi problemi.

Usa GET se non ti dispiace che la richiesta venga ripetuta (cioè non cambia stato).

Utilizzare POST se l'operazione modifica lo stato del sistema.

Versione breve

OTTENERE:Solitamente utilizzato per le richieste di ricerca inviate o qualsiasi richiesta in cui si desidera che l'utente sia in grado di visualizzare nuovamente la pagina esatta.

Vantaggi di GET:

  • Gli URL possono essere aggiunti ai segnalibri in modo sicuro.
  • Le pagine possono essere ricaricate in sicurezza.

Svantaggi di GET:

INVIARE:Utilizzato per richieste di sicurezza più elevate in cui i dati possono essere utilizzati per alterare un database o una pagina che non si desidera che qualcuno aggiunga ai segnalibri.

Vantaggi del POST:

  • Le coppie nome-valore non vengono visualizzate nell'URL.(Sicurezza += 1)
  • È possibile passare tramite POST un numero illimitato di coppie nome-valore. Riferimento.

Svantaggi del POST:

  • La pagina che utilizzava dati POST non può essere aggiunta ai segnalibri.(Se lo desideri.)

Versione più lunga

Direttamente dal Protocollo di trasferimento ipertestuale -- HTTP/1.1:

9.3 OTTIENI

Il metodo GET significa recuperare qualsiasi informazione (sotto forma di entità) identificata dall'URI di richiesta.Se l'URI della richiesta si riferisce a un processo di produzione di dati, saranno i dati prodotti che verranno restituiti come entità nella risposta e non il testo sorgente del processo, a meno che quel testo non sia l'output del processo.

La semantica del metodo GET cambia in un "GET condizionale" se il messaggio di richiesta include un campo di intestazione If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match o If-Range.Un metodo GET condizionale richiede che l'entità venga trasferita solo nelle circostanze descritte dai campi dell'intestazione condizionale.Il metodo GET condizionale ha lo scopo di ridurre l'utilizzo non necessario della rete consentendo l'aggiornamento delle entità memorizzate nella cache senza richiedere più richieste o trasferire dati già conservati dal client.

La semantica del metodo GET cambia in un "GET parziale" se il messaggio di richiesta include un campo di intestazione Range.Un GET parziale richiede che solo una parte dell'entità venga trasferita, come descritto nella sezione 14.35.Il metodo GET parziale ha lo scopo di ridurre l'utilizzo non necessario della rete consentendo il completamento delle entità parzialmente recuperate senza trasferire i dati già detenuti dal client.

La risposta a una richiesta GET è memorizzabile nella cache se e solo se soddisfa i requisiti per la memorizzazione nella cache HTTP descritti nella sezione 13.

Vedere la sezione 15.1.3 per considerazioni sulla sicurezza quando utilizzato per i moduli.

9.5 POST

Il metodo post viene utilizzato per richiedere che il server Origin accetti l'entità racchiusa nella richiesta come nuovo subordinato della risorsa identificata dalla richiesta-URI nella linea di richiesta.Il post è progettato per consentire un metodo uniforme per coprire le seguenti funzioni:

  • Annotazione delle risorse esistenti;

  • Pubblicare un messaggio in una bacheca, newsgroup, mailing list o un gruppo di articoli simili;

  • Fornire un blocco di dati, come il risultato della presentazione di un modulo, a un processo di gestione dei dati;

  • Estensione di un database tramite un'operazione di aggiunta.

La funzione effettiva eseguita con il metodo post è determinata dal server e di solito dipende dalla richiesta-URI.L'entità pubblicata è subordinata a quell'URI allo stesso modo in cui un file è subordinato a una directory contenente, un articolo di notizie è subordinato a un newsgroup a cui è pubblicato o un record è subordinato a un database.

L'azione eseguita dal metodo post potrebbe non comportare una risorsa che può essere identificata da un URI.In questo caso, 200 (OK) o 204 (nessun contenuto) è lo stato di risposta appropriato, a seconda che la risposta includa o meno un'entità che descrive il risultato.

La prima cosa importante è il Senso di GET rispetto a POST:

  • GET dovrebbe essere utilizzato per...Ottenere...alcune informazioni da il server,
  • mentre POST dovrebbe essere utilizzato per inviare alcune informazioni A il server.


Dopodiché si possono notare un paio di cose:

  • Utilizzando GET, i tuoi utenti possono utilizzare il pulsante "Indietro" nel proprio browser e possono aggiungere pagine ai segnalibri
  • Esiste un limite alla dimensione dei parametri che puoi passare come GET (2KB per alcune versioni di Internet Explorer, se non sbaglio) ;il limite è molto maggiore per il POST e generalmente dipende dalla configurazione del server.


Ad ogni modo, non penso che potremmo "vivere" senza GET :pensa a quanti URL utilizzi con parametri nella stringa di query, ogni giorno: senza GET, tutti questi non funzionerebbero ;-)

Oltre alla differenza dei vincoli di lunghezza in molti browser web, esiste anche una differenza semantica.I GET dovrebbero essere "sicuri" in quanto sono operazioni di sola lettura che non modificano lo stato del server.I POST in genere cambieranno stato e forniranno avvisi al nuovo invio.I web crawler dei motori di ricerca possono creare GET ma non dovrebbero mai creare POST.

Utilizza GET se desideri leggere i dati senza modificare lo stato e utilizza POST se desideri aggiornare lo stato sul server.

La mia regola generale è utilizzare Get quando si effettuano richieste al server che non modificheranno lo stato.I post sono riservati per le richieste al server che alterano lo stato.

Una differenza pratica è che i browser e i server web hanno un limite al numero di caratteri che possono esistere in un URL.È diverso da un'applicazione all'altra, ma è certamente possibile colpirlo se ce l'hai textareas nei tuoi moduli.

Un altro problema con i GET: vengono indicizzati dai motori di ricerca e da altri sistemi automatici.Google una volta aveva un prodotto che prerecuperava i collegamenti sulla pagina che stavi visualizzando, quindi sarebbero stati più veloci da caricare se avessi fatto clic su quei collegamenti.Ha causato maggiore caos su siti che avevano collegamenti come delete.php?id=1 - le persone hanno perso interi siti.

Utilizza GET quando desideri che l'URL rifletta lo stato della pagina.Ciò è utile per visualizzare pagine generate dinamicamente, come quelle viste qui.Un POST dovrebbe essere utilizzato in un modulo per inviare dati, come quando faccio clic sul pulsante "Pubblica la tua risposta".Produce anche un URL più pulito poiché non genera una stringa di parametri dopo il percorso.

Poiché i GET sono puramente URL, possono essere memorizzati nella cache dal browser Web e possono essere utilizzati meglio per cose come immagini generate in modo coerente.(Imposta una scadenza)

Un esempio dalla pagina gravatar: http://www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802?d=monsterid

GET può fornire prestazioni leggermente migliori, alcuni server web scrivono i contenuti POST in un file temporaneo prima di invocare il gestore.

Un'altra cosa da considerare è il limite di dimensione.I GET sono limitati dalla dimensione dell'URL, 1024 byte secondo lo standard, sebbene i browser possano supportarne di più.

Il trasferimento di più dati dovrebbe utilizzare un POST per ottenere una migliore compatibilità del browser.

Anche meno di questo limite è un problema, come ha scritto un altro utente, qualsiasi cosa nell'URL potrebbe finire in altre parti dell'interfaccia utente del browser, come la cronologia.

Non c'è niente che non puoi fare di per sé.Il punto è che non lo sei ipotetico per modificare lo stato del server su un HTTP GET.I proxy HTTP presuppongono che, poiché HTTP GET non modifica lo stato, non fa differenza se un utente richiama HTTP GET una volta o 1000 volte.Utilizzando queste informazioni presumono che sia sicuro restituire una versione memorizzata nella cache del primo HTTP GET.Se infrangi la specifica HTTP rischi di danneggiare il client HTTP e i proxy in natura.Non farlo :)

Ciò attraversa il concetto di REST e il modo in cui il web era destinato a essere utilizzato.C'è un eccellente podcast alla radio Software Engineering che tiene un discorso approfondito sull'uso di Get e Post.

Get viene utilizzato per estrarre dati dal server, dove non dovrebbe essere necessaria un'azione di aggiornamento.L'idea è che dovresti essere in grado di utilizzare la stessa richiesta GET più e più volte e ottenere le stesse informazioni restituite.L'URL contiene le informazioni di recupero nella stringa di query, perché doveva poter essere facilmente inviato ad altri sistemi e persone come un indirizzo su dove trovare qualcosa.

Si suppone che il post sia utilizzato (almeno dall'architettura REST su cui si basa il Web) per inviare informazioni al server/dire al server di eseguire un'azione.Esempi come:Aggiorna questi dati, Crea questo record.

1.3 Elenco di controllo rapido per la scelta di HTTP GET O POST

Utilizza GET se:

    The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).

Utilizza POST se:

    The interaction is more like an order, or
    The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or
    The user be held accountable for the results of the interaction.

Fonte.

Non vedo alcun problema nell'usare get, tuttavia, lo uso per cose semplici in cui ha senso mantenere le cose nella stringa di query.

Usandolo per aggiornare lo stato, come un GET of delete.php?id=5 eliminare una pagina - è molto rischioso.Le persone lo hanno scoperto quando l'acceleratore web di Google ha iniziato a precaricare gli URL sulle pagine: ha colpito tutti i collegamenti "elimina" e ha cancellato i dati delle persone.La stessa cosa può succedere con gli spider dei motori di ricerca.

POST può spostare dati di grandi dimensioni mentre GET no.

Ma generalmente non si tratta di un difetto di GET, piuttosto di una convenzione se vuoi che il tuo sito web/webapp si comporti bene.

Dai un'occhiata a http://www.w3.org/2001/tag/doc/whenToUseGet.html

Da RFC2616:

9.3 OTTENERE
Il metodo GET significa recuperare qualsiasi informazione (sotto forma di un'entità) sia identificata dalla richiesta-URI.Se la richiesta-URI si riferisce a un processo di produzione di dati, sono i dati prodotti che devono essere restituiti come entità nella risposta e non il testo di origine del processo, a meno che tale testo non sia l'output del processo.


9.5 INVIARE
Il metodo post viene utilizzato per richiedere che il server Origin accetti l'entità racchiusa nella richiesta come nuovo subordinato della risorsa identificata dalla richiesta-URI nella linea di richiesta.Il post è progettato per consentire un metodo uniforme per coprire le seguenti funzioni:

  • Annotazione delle risorse esistenti;
  • Pubblicare un messaggio in una bacheca, newsgroup, mailing list o un gruppo di articoli simili;
  • Fornire un blocco di dati, come il risultato della presentazione di un modulo, a un processo di gestione dei dati;
  • Estensione di un database tramite un'operazione di aggiunta.

La funzione effettiva eseguita con il metodo post è determinata dal server e di solito dipende dalla richiesta-URI.L'entità pubblicata è subordinata a quell'URI allo stesso modo in cui un file è subordinato a una directory contenente, un articolo di notizie è subordinato a un newsgroup a cui è pubblicato o un record è subordinato a un database.

L'azione eseguita dal metodo post potrebbe non comportare una risorsa che può essere identificata da un URI.In questo caso, 200 (OK) o 204 (nessun contenuto) è lo stato di risposta appropriato, a seconda che la risposta includa o meno un'entità che descrive il risultato.

Utilizzo POST quando non voglio che le persone vedano QueryString o quando QueryString diventa grande.Inoltre, POST è necessario per il caricamento dei file.

Tuttavia non vedo problemi nell'usare GET, lo uso per cose semplici in cui ha senso mantenere le cose su QueryString.

L'uso di GET consentirà anche il collegamento a una pagina particolare in cui POST non funzionerebbe.

Versione semplice di POST GET PUT DELETE

  • usa GET - quando vuoi ottenere qualsiasi risorsa come Elenco di dati in base a qualsiasi ID o nome
  • usa POST - quando vuoi inviare dati al server.Tieni presente che il post è un'operazione di peso pesante perché per l'aggiornamento dovremmo usare Put invece di Post Post creerà una nuova risorsa
  • usa PUT - quando tu

L'intento originale era che GET fosse utilizzato per recuperare i dati e POST doveva essere qualsiasi cosa.La regola pratica che utilizzo è che se invio qualcosa al server, utilizzo POST.Se sto semplicemente chiamando un URL per recuperare i dati, utilizzo GET.

Leggi il articolo su HTTP in Wikipedia.Spiegherà cos'è il protocollo e cosa fa:

OTTENERE

Richiede una rappresentazione della risorsa specificata.Tieni presente che GET non deve essere utilizzato per operazioni che causano effetti collaterali, come utilizzarlo per eseguire azioni nelle applicazioni web.Uno dei motivi è che GET può essere utilizzato arbitrariamente da robot o crawler, che non dovrebbero considerare gli effetti collaterali che una richiesta dovrebbe causare.

E

INVIAREInvia i dati da elaborare (ad esempio, da un modulo HTML) alla risorsa identificata.I dati sono inseriti nel corpo della richiesta.Ciò potrebbe comportare la creazione di una nuova risorsa o l'aggiornamento di risorse esistenti o entrambi.

Il W3C ha un documento denominato URI, indirizzabilità e utilizzo di HTTP GET e POST che spiega quando usare cosa.Citando

1.3 Elenco di controllo rapido per la scelta di HTTP GET o POST

  • Utilizza GET se:
    • L'interazione è più simile a una domanda (cioè è un'operazione sicura come una query, un'operazione di lettura o una ricerca).

E

  • Utilizza POST se:
    • L'interazione è più simile a un ordine, o
    • L'interazione modifica lo stato della risorsa in modo tale che l'utente percepisca (ad esempio un abbonamento a un servizio) o che l'utente sia ritenuto responsabile per i risultati dell'interazione.

Tuttavia, prima della decisione finale di utilizzare HTTP GET o POST, si prega di considerare anche considerazioni sui dati sensibili e considerazioni pratiche.

Un esempio pratico potrebbe essere ogni volta che invii un modulo HTML.Specificali tu inviare O Ottenere per l'azione del modulo.PHP popolerà $_GET e $_POST di conseguenza.

In PHP, POST il limite dei dati è solitamente impostato dal tuo php.ini. GET è limitato dalle impostazioni del server/browser, credo, di solito in giro 255 byte.

Da w3schools.com:

Cos'è l'HTTP?

Hypertext Transfer Protocol (HTTP) è progettato per abilitare le comunicazioni tra client e server.

HTTP funziona come un protocollo di richiesta-risposta tra un client e un server.

Un browser Web può essere il client e un'applicazione su un computer che ospita un sito Web potrebbe essere il server.

Esempio:Un client (browser) invia una richiesta HTTP al server;quindi il server restituisce una risposta al client.La risposta contiene informazioni sullo stato sulla richiesta e può anche contenere il contenuto richiesto.

Due metodi di richiesta HTTP:OTTIENI e PUBBLICA

Due metodi comunemente usati per una risposta di richiesta tra un client e un server sono:OTTIENI e PUBBLICA.

Get - Richiede i dati da un post di risorsa specificato: presenta i dati da elaborare a una risorsa specificata

Qui distinguiamo le principali differenze:

enter image description here

Beh, una cosa importante è tutto ciò a cui sottoponi GET verrà esposto tramite l'URL.In secondo luogo, come dice Ceejayoz, esiste un limite ai caratteri per un URL.

Un'altra differenza è che POST richiede generalmente due operazioni HTTP, mentre GET ne richiede solo una.

Modificare:Dovrei chiarire: per i modelli di programmazione comuni.Generalmente rispondere a un post con una pagina Web HTML diretta è un design discutibile per una serie di motivi, uno dei quali è il fastidioso "Devi reinserire questo modulo, lo desideri farlo?" Premendo il pulsante Indietro.

Come hanno risposto altri, esiste un limite alla dimensione dell'URL con get e i file possono essere inviati solo con post.

Vorrei aggiungere quello Potere aggiungi cose a un database con un get ed esegui azioni con un post.Quando uno script riceve un post o un get, può fare tutto ciò che l'autore vuole che faccia.Credo che la mancanza di comprensione derivi dalla formulazione scelta dal libro o da come lo leggi.

Un autore di sceneggiature Dovrebbe utilizzare post per modificare il database e utilizzare get solo per il recupero di informazioni.

I linguaggi di scripting hanno fornito molti mezzi con cui accedere alla richiesta.Ad esempio, PHP consente l'uso di $_REQUEST per recuperare un post o un get.Si dovrebbe evitare questo a favore di qualcosa di più specifico $_GET O $_POST.

Nella programmazione web c'è molto più spazio per l'interpretazione.Ecco cosa Dovrebbe e quale Potere fare, ma quale sia il migliore è spesso oggetto di dibattito.Per fortuna, in questo caso, non c’è alcuna ambiguità.Voi Dovrebbe usa i post per modificare i dati e tu Dovrebbe utilizzare get per recuperare informazioni.

Gorgapor, mod_rewrite utilizza ancora spesso GET.Permette semplicemente di tradurre un URL più amichevole in un URL con a GET stringa della domanda.

I dati dei post HTTP non hanno un limite specificato sulla quantità di dati, mentre browser diversi hanno limiti diversi per i GET.La RFC 2068 afferma:

I server dovrebbero essere cauti in base alle lunghezze dell'URI superiori a 255 byte, perché alcune implementazioni di clienti o proxy più anziani potrebbero non supportare correttamente queste lunghezze

Nello specifico dovresti avere i costrutti HTTP giusti per quello per cui vengono utilizzati.I GET HTTP non dovrebbero avere effetti collaterali e possono essere aggiornati e archiviati in modo sicuro dai proxy HTTP, ecc.

I POST HTTP vengono utilizzati quando si desidera inviare dati rispetto a una risorsa URL.

Un tipico esempio di utilizzo di HTTP GET è su una ricerca, ad es.Cerca? Query = My+Query Un esempio tipico per l'utilizzo di un post HTTP è inviare feedback a un modulo online.

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