Domanda

Entrambi sembrano inviare dati al server all'interno del corpo, quindi cosa li rende diversi?

È stato utile?

Soluzione

HTTP PUT:

PUT inserisce un file o una risorsa in un URI specifico e esattamente in tale URI. Se esiste già un file o una risorsa in quell'URI, PUT sostituisce quel file o risorsa. Se non ci sono file o risorse lì, PUT ne crea uno. PUT è idempotent , ma paradossalmente le risposte PUT non sono memorizzabili nella cache .

Posizione RFC HTTP 1.1 per PUT

POST HTTP:

POST invia i dati a un URI specifico e si aspetta che la risorsa in tale URI gestisca la richiesta. Il server Web a questo punto può determinare cosa fare con i dati nel contesto della risorsa specificata. Il metodo POST non è idempotent , tuttavia le risposte POST < em> sono memorizzabili nella cache fintanto che il server imposta le intestazioni Cache-Control appropriate e scade.

La RFC HTTP ufficiale specifica che POST è:

  • Annotazione di risorse esistenti;
  • Invio di un messaggio a una bacheca, a un newsgroup, a una mailing list,    o un gruppo simile di articoli;
  • Fornire un blocco di dati, ad esempio il risultato dell'invio di a     modulo, a un processo di gestione dei dati;
  • Estensione di un database tramite un'operazione di accodamento.

Posizione RFC HTTP 1.1 per POST

Differenza tra POST e PUT:

Lo stesso RFC spiega la differenza fondamentale:

  

La differenza fondamentale tra il   Le richieste POST e PUT si riflettono in   il diverso significato di   Richiesta-URI. L'URI in una richiesta POST   identifica la risorsa che lo farà   gestire l'entità chiusa. Quello   la risorsa potrebbe essere un'accettazione di dati   processo, un gateway per qualcun altro   protocollo o un'entità separata che   accetta annotazioni. Al contrario, il   L'URI in una richiesta PUT identifica il file   entità allegata alla richiesta -   l'agente utente sa cos'è l'URI   previsto e il server NON DEVE   tenta di applicare la richiesta ad alcuni   altra risorsa. Se il server lo desidera   che la richiesta sia applicata a   URI diverso, DEVE inviare una risposta 301 (spostata in modo permanente); l'agente utente PUO 'quindi effettuare   la propria decisione relativa al reindirizzamento della richiesta o meno.

Utilizzando il metodo giusto, non correlato a parte:

Un vantaggio di REST ROA rispetto a SOAP è che quando si utilizza HTTP REST ROA, incoraggia il corretto utilizzo dei verbi / metodi HTTP. Quindi, per esempio, useresti PUT solo quando desideri creare una risorsa in quella posizione esatta. E non useresti mai GET per creare o modificare una risorsa.

Altri suggerimenti

Solo semantica.

Un PUT HTTP dovrebbe accettare il corpo della richiesta e quindi memorizzarlo nella risorsa identificata dall'URI.

Un POST HTTP è più generale. Dovrebbe avviare un'azione sul server. Tale azione potrebbe essere quella di archiviare il corpo della richiesta nella risorsa identificata dall'URI o potrebbe essere un URI diverso o potrebbe essere un'azione diversa.

PUT è come un caricamento di file. Un put a un URI influenza esattamente quell'URI. Un POST a un URI potrebbe avere alcun effetto.

Per fornire esempi di risorse in stile REST:

" POST / libri " con un mucchio di informazioni sul libro potrebbe creare un nuovo libro e rispondere con il nuovo URL che identifica quel libro: " / books / 5 " ;.

" PUT / books / 5 " dovrebbe creare un nuovo libro con ID 5 o sostituire il libro esistente con ID 5.

In stile senza risorse, il POST può essere utilizzato per qualsiasi cosa abbia un effetto collaterale. Un'altra differenza è che il PUT dovrebbe essere idempotente: più PUT degli stessi dati nello stesso URL dovrebbero andare bene, laddove più POST potrebbero creare più oggetti o qualunque cosa sia la tua azione POST.

PUT è inteso come metodo per "caricare" " roba in un URI particolare o sovrascrivere ciò che è già in quell'URI.

Il POST, d'altra parte, è un modo per inviare dati CORRELATI a un determinato URI.

Fare riferimento a la RFC HTTP

Per quanto ne so, PUT viene utilizzato principalmente per aggiornare i record.

  1. POST - Per creare un documento o qualsiasi altra risorsa

  2. PUT - Per aggiornare il documento creato o qualsiasi altra risorsa.

Ma per essere chiari sul fatto che PUT di solito 'Sostituisce' il record esistente se è presente e crea se non è presente ..

Altri hanno già pubblicato risposte eccellenti, volevo solo aggiungerlo con la maggior parte delle lingue, dei framework e dei casi d'uso di cui avrai a che fare con POST, molto più spesso di PUT. Al punto in cui PUT, DELETE, ecc. Sono fondamentalmente domande trivia.

  1. OTTIENI : recupera i dati dal server. Non dovrebbe avere altri effetti.
  2. POST : invia i dati al server per la creazione di una nuova entità. Spesso utilizzato quando si carica un file o si invia un modulo Web.
  3. PUT : simile a POST, ma utilizzato per sostituire un'entità esistente.
  4. PATCH : simile a PUT, ma utilizzato per aggiornare solo determinati campi all'interno di un'entità esistente.
  5. ELIMINA : rimuove i dati dal server.
  6. TRACCIA : fornisce un modo per testare quale server riceve. Restituisce semplicemente ciò che è stato inviato.
  7. OPZIONI : consente a un client di ottenere informazioni sui metodi di richiesta supportati da un servizio. L'intestazione di risposta pertinente è Consenti con metodi supportati. Utilizzato anche in CORS come richiesta di verifica preliminare per informare il server sul metodo di richiesta effettivo e chiedere informazioni sulle intestazioni personalizzate.
  8. HEAD : restituisce solo le intestazioni di risposta.
  9. CONNECT : utilizzato dal browser quando sa che parla a un proxy e l'URI finale inizia con https: //. Lo scopo di CONNECT è consentire la sessione TLS crittografata end-to-end, quindi i dati sono illeggibili per un proxy.

Un POST è considerato un metodo di tipo factory. Includete i dati con esso per creare ciò che volete e qualunque cosa si trovi dall'altra parte sa cosa farne. Un PUT viene utilizzato per aggiornare i dati esistenti in un determinato URL o per creare qualcosa di nuovo quando si sa quale sarà l'URI e non esiste già (al contrario di un POST che creerà qualcosa e restituirà un URL a se necessario).

Vedi: http://zacharyvoase.com/2009/07/03/http -post-mettere-diff /

Ultimamente sono stato abbastanza infastidito da un malinteso popolare da parte degli sviluppatori web che un POST viene utilizzato per creare una risorsa e un PUT per aggiornarne / cambiarne uno

Se dai un'occhiata a pagina 55 di RFC 2616 (& # 8220; Hypertext Transfer Protocol & # 8211; HTTP / 1.1 & # 8221;), Sezione 9.6 (& # 8220; PUT & # 8221;), & # 8217; vedrai a cosa serve PUT:

  

Il metodo PUT richiede che l'entità inclusa sia archiviata nell'URI di richiesta fornito.

C'è anche un utile paragrafo per spiegare la differenza tra POST e PUT:

  

La differenza fondamentale tra le richieste POST e PUT si riflette nel diverso significato di Request-URI. L'URI in una richiesta POST identifica la risorsa che gestirà l'entità chiusa. Tale risorsa potrebbe essere un processo di accettazione dei dati, un gateway verso qualche altro protocollo o un'entità separata che accetta le annotazioni. Al contrario, l'URI in una richiesta PUT identifica l'entità inclusa nella richiesta & # 8211; l'agente utente sa a cosa serve l'URI e il server NON DEVE tentare di applicare la richiesta ad altre risorse.

Non menziona nulla sulla differenza tra aggiornamento / creazione, perché non è ciò di cui si tratta. È circa la differenza tra questo:

obj.set_attribute(value) # A POST request.

E questo:

obj.attribute = value # A PUT request.

Quindi, per favore, ferma la diffusione di questo malinteso popolare. Leggi i tuoi RFC.

REST chiede agli sviluppatori di usare i metodi HTTP esplicitamente e in modo coerente con definizione del protocollo. Questo principio di progettazione REST di base stabilisce un mapping uno a uno tra creare, leggere, aggiornare ed eliminare (CRUD) operazioni e metodi HTTP. Secondo questo mappatura:

• Per creare una risorsa sul server, utilizzare POST.

• Per recuperare una risorsa, utilizzare GET.

• Per modificare lo stato di una risorsa o per aggiornarla, utilizzare PUT.

• Per rimuovere o eliminare una risorsa, utilizzare CANC.

Ulteriori informazioni: Servizi Web RESTful: le basi di IBM

La differenza tra POST e PUT è che PUT è idempotente, ciò significa che chiamare la stessa richiesta PUT più volte produrrà sempre lo stesso risultato (che non è un effetto collaterale), mentre d'altra parte, chiamare ripetutamente una richiesta POST può avere effetti (aggiuntivi) collaterali sulla creazione della stessa risorsa più volte.

GET : le richieste che utilizzano GET recuperano solo dati, ovvero richiedono una rappresentazione della risorsa specificata

POST : invia i dati al server per creare una risorsa. Il tipo di corpo della richiesta è indicato dall'intestazione Content-Type. Spesso provoca un cambiamento di stato o effetti collaterali sul server

PUT : crea una nuova risorsa o sostituisce una rappresentazione della risorsa di destinazione con il payload della richiesta

PATCH : viene utilizzato per applicare modifiche parziali a una risorsa

DELETE : elimina la risorsa specificata

TRACE : esegue un test di loopback del messaggio lungo il percorso della risorsa di destinazione, fornendo un utile meccanismo di debug

OPTIONS : viene utilizzato per descrivere le opzioni di comunicazione per la risorsa di destinazione, il client può specificare un URL per il metodo OPTIONS o un asterisco (*) per fare riferimento all'intero server.

HEAD : richiede una risposta identica a quella di una richiesta GET, ma senza il corpo della risposta

CONNECT : stabilisce un tunnel per il server identificato dalla risorsa di destinazione, può essere utilizzato per accedere a siti Web che utilizzano SSL (HTTPS)

Vale la pena ricordare che POST è soggetto ad alcuni attacchi CSRF comuni mentre PUT non lo è.

Il CSRF di seguito non è impossibile con PUT quando la vittima visita attackersite.com:

Richiesta normale (i cookie vengono inviati): ( PUT non è un valore di attributo supportato)

<form id="myform" method="post" action="http://target.site.com/deleteUser" >
    <input type="hidden" name="userId" value="5">
</form>
<script>document.createElement('form').submit.call(document.getElementById('myform'));</script>

Richiesta XHR (i cookie vengono inviati): ( PUT attiverà una richiesta di verifica preliminare)

var xhr = new XMLHttpRequest();
xhr.open("POST", "http://target.site.com/deleteUser");
xhr.withCredentials=true;
xhr.send(["userId=5"]);

Semplicemente

POST viene utilizzato per creare una risorsa e restituisce la risorsa URI EX

REQUEST : POST ..../books
{
"book":"booName",
"author":"authorName"
}

Questa chiamata dovrebbe creare un nuovo libro e restituire quel libro URI

Response ..../books/5

PUT viene utilizzato per sostituire una risorsa, se tale risorsa esiste, è sufficiente aggiornarla, ma se tale risorsa non esiste quindi crearla,

REQUEST : PUT ..../books/5
{
"book":"booName",
"author":"authorName"
}

utilizzando PUT forniremo l'identificatore di risorsa, ma POST restituirà il nuovo identificatore di risorsa

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