it-swarm-eu.dev

Jaký je rozdíl mezi a POST a PUT HTTP REQUEST?

Zdá se, že oba posílají data na server uvnitř těla, takže co je odlišuje?

673
fuentesjr

HTTP PUT:

PUT umístí soubor nebo prostředek na konkrétní URI a přesně na tento URI. Pokud u tohoto URI již existuje soubor nebo prostředek, nahradí tento soubor nebo prostředek. Pokud tam není žádný soubor nebo zdroj, vytvoří se PUT. PUT je idempotentní , ale paradoxně PUT odezvy nejsou cachovatelné.

HTTP 1.1 RFC umístění pro PUT

HTTP POST: 

POST odešle data specifickému URI a očekává, že zdroj na tomto URI bude zpracovávat požadavek. Webový server v tomto okamžiku může určit, co dělat s daty v kontextu zadaného zdroje. Metoda POST není idempotent , ale POST odpovědi are cacheable tak dlouho, dokud server nastaví příslušné záhlaví Cache-Control a Expires.

Oficiální RFC protokolu HTTP určuje POST:

  • Anotace stávajících zdrojů;
  • Zveřejnění zprávy na nástěnce, diskusní skupinu, seznam adres, Nebo podobnou skupinu článků;
  • Poskytování datového bloku, jako je výsledek podání formuláře Procesu zpracování dat;
  • Rozšíření databáze prostřednictvím přidané operace. 

umístění HTTP 1.1 RFC pro POST

Rozdíl mezi POST a PUT:

Samotný RFC vysvětluje hlavní rozdíl:

Základní rozdíl mezi POST a PUT požadavky se odráží v Odlišném významu Požadavku-URI. Identifikátor URI v požadavku POST Identifikuje zdroj, který bude zpracovávat uzavřený subjekt. Zdrojem Může být proces přijímání dat , Brána k jinému protokolu nebo samostatná entita, která Přijímá anotace. Naproti tomu URI identifikátoru V požadavku PUT identifikuje entitu Uzavřenou s požadavkem - Agent uživatele ví, jaké URI je určeno A server MUSÍ NOT Se pokouší aplikovat žádost na jiný zdroj.... Pokud si server přeje, aby byl požadavek aplikován na jiný URI , MUSÍ odeslat odpověď 301 (Moved Permanently); uživatelský agent pak může učinit své vlastní rozhodnutí o tom, zda žádost přesměrovat.

Pomocí správné metody, nesouvisející stranou:

Jednou z výhod REST ROA vs SOAP je, že při použití HTTP REST ROA podporuje správné používání sloves/metod HTTP. Tak například byste použili PUT pouze tehdy, když chcete vytvořit zdroj v tomto místě. A nikdy byste nepoužívali GET k vytvoření nebo úpravě zdroje.

693
Brian R. Bondy

Pouze sémantika.

HTTP PUT má přijmout tělo požadavku a pak jej uložit na zdroj identifikovaný URI.

HTTP POST je obecnější. Má iniciovat akci na serveru. Tato akce by mohla být uložením těla požadavku na zdroj identifikovaný identifikátorem URI, nebo by to mohlo být jiné URI, nebo by to mohla být jiná akce.

PUT je jako upload souboru. URI na URI ovlivňuje přesně tento URI. POST k URI může mít vůbec nějaký účinek.

170
Jonathan Arkell

Příklady příkladů prostředků stylu REST:

"POST/knihy" se spoustou informací o knize mohou vytvořit novou knihu a reagovat s novou adresou URL identifikující tuto knihu: "/ books/5".

"PUT/books/5" by muselo buď vytvořit novou knihu s ID 5, nebo nahradit stávající knihu ID 5.

Ve stylu, který není zdrojem, lze POST použít pro cokoliv, co má vedlejší účinek. Další rozdíl je v tom, že PUT by mělo být idempotentní - více PUT stejných dat na stejnou adresu URL by mělo být v pořádku, protože více POST může vytvořit více objektů nebo co je to akce POST.

103
bhollis

PUT je míněno jako metoda pro "nahrání" věci na konkrétní URI, nebo přepsání toho, co je již v tomto URI.

Naproti tomu POST je způsob, jak předávat data vztahující se k danému URI.

Viz HTTP RFC

55
Daniel Bruce

Pokud vím, PUT se většinou používá pro aktualizaci záznamů. 

  1. POST - Vytvoření dokumentu nebo jiného zdroje

  2. PUT - Aktualizace vytvořeného dokumentu nebo jiného zdroje.

Ale aby bylo jasné, že PUT obvykle „Nahrazuje“ existující záznam, pokud je tam a vytvoří, pokud tam není.

38
ChanGan

Jiní již zaslali vynikající odpovědi, chtěl jsem jen dodat, že s většinou jazyků, rámců a případů použití se budete zabývat POST mnohem, mnohem častěji než PUT. Do bodu, kde jsou PUT, DELETE, atd. V podstatě trivia otázky.

16
Jason Morrison
  1. GET: Načte data ze serveru. Neměl by mít žádný jiný účinek.
  2. POST: Odesílá data serveru pro vytvoření nové entity. Často se používá při nahrávání souboru nebo odeslání webového formuláře.
  3. PUT: Podobně jako POST, ale používané k nahrazení existující entity.
  4. PATCH: Podobný PUT, ale používá se pouze pro aktualizaci určitých polí v rámci existující entity.
  5. DELETE: Odstraní data ze serveru.
  6. TRACE: Poskytuje způsob, jak otestovat, který server přijímá. To prostě vrátí to, co bylo odesláno.
  7. OPTIONS: Umožňuje klientovi získat informace o metodách požadavku podporovaných službou. Příslušná záhlaví odezvy je Povolit s podporovanými metodami. Také v CORS jako předletový požadavek informovat server o skutečné metodě požadavku a zeptat se na vlastní záhlaví.
  8. HEAD: Vrací pouze záhlaví odpovědí.
  9. CONNECT: Používá prohlížeč, když ví, že komunikuje se serverem proxy a konečný identifikátor URI začíná https: //. Záměrem CONNECT je umožnit šifrovanou relaci TLS s koncovými body, takže data jsou pro server proxy nečitelná. 
13
walkerbox

A POST je považováno za něco, co je výrobním způsobem. Data s ním vytvoříte tak, abyste vytvořili to, co chcete a co je na druhém konci, ví, co s ním dělat. PUT se používá k aktualizaci existujících dat na dané adrese URL nebo k vytvoření něčeho nového, když víte, co bude URI a nebude existovat (na rozdíl od POST, který něco vytvoří a v případě potřeby mu vrátit adresu URL). 

11
user12786

Viz: http://zacharyvoase.com/2009/07/03/http-post-put-diff/

V poslední době jsem se dost zlobí populární misconception web vývojáři, že POST se používá k vytvoření zdroje, a PUT slouží k aktualizaci/změnu jednoho.

Pokud se podíváte na stránku 55 RFC 2616 („Hypertext Transfer Protocol - HTTP/1.1“), Section 9.6 („PUT“), uvidíte, co je vlastně PUT:

Metoda PUT vyžaduje, aby uzavřený subjekt byl uložen pod dodaným URI požadavku.

K dispozici je také užitečný odstavec, který vysvětluje rozdíl mezi POST a PUT:

Základní rozdíl mezi požadavky POST a PUT se odráží v odlišném významu požadavku URI. Identifikátor URI v požadavku POST identifikuje prostředek, který bude zpracovávat uzavřenou entitu. Tento zdroj může být proces přijímání dat, brána do jiného protokolu nebo samostatná entita, která přijímá anotace. Naproti tomu URI v požadavku PUT identifikuje entitu uzavřenou s požadavkem - uživatelský agent ví, co je URI zamýšleno, a server se NESMÍ pokoušet aplikovat požadavek na jiný zdroj.

Nezmínil se o rozdílu mezi aktualizací/tvorbou, protože to není o čem je. Jedná se o rozdíl mezi tímto:

obj.set_attribute(value) # A POST request.

A tohle:

obj.attribute = value # A PUT request.

Takže prosím, zastavte šíření této populární mylné představy. Přečtěte si RFC.

9
Najeebul Hasan

REST požádá vývojáře, aby používali metody HTTP explicitně a způsobem, který je v souladu s definicí protokolu . Tento základní princip REST zavádí individuální mapování mezi Operacemi vytváření, čtení, aktualizace a mazání (CRUD) a metodami HTTP. Podle tohoto Mapování:

• Chcete-li vytvořit zdroj na serveru, použijte POST.

• Chcete-li načíst zdroj, použijte GET.

• Chcete-li změnit stav zdroje nebo jej aktualizovat, použijte PUT.

• Chcete-li odebrat nebo odstranit prostředek, použijte DELETE.

Více informací: Webové služby RESTful: Základy od IBM

9
Long Nguyen

Za zmínku stojí, že POST je předmětem některých společných CSRF útoků zatímco PUT není.

CSRF níže je není možné s PUTkdyž oběť navštíví attackersite.com:

Normální požadavek (soubory cookie jsou odesílány): (PUT není podporovaná hodnota atributu)

<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>

Požadavek XHR (soubory cookie jsou odesílány): (PUT by spustil požadavek před výstupem)

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

Jednoduše

POST se používá k vytvoření zdroje a vrací zdroj URI EX

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

Toto volání by mělo vytvořit novou knihu a vrátit tuto knihu URI

Response ..../books/5

PUT se používá k nahrazení zdroje, pokud tento zdroj existuje, pak jej jednoduše aktualizujte, ale pokud tento zdroj neexistuje, vytvořte jej,

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

pomocí PUT poskytneme identifikátor zdroje, ale POST vrátí nový identifikátor zdroje

0
Melad Ezzat

Rozdíl mezi POST a PUT je ten, že PUT je idempotentní, to znamená, že volání stejného požadavku PUT vícekrát bude vždy produkovat stejný výsledek (to není žádný vedlejší efekt), zatímco na druhé straně, volání POST požadavek může mít opakovaně (dodatečné) vedlejší účinky vytváření více zdrojů vícekrát.

GET: Požadavky pomocí GET pouze načtou data, to znamená, že požaduje reprezentaci zadaného zdroje

POST: Odesílá data serveru k vytvoření zdroje. Typ těla požadavku je označen hlavičkou Content-Type. Často způsobuje změnu stavu nebo vedlejší účinky na serveru

PUT: Vytvoří nový zdroj nebo nahradí reprezentaci cílového zdroje užitečným datem požadavku

PATCH: Používá se k použití částečných úprav zdroje

DELETE: Vymaže zadaný prostředek

TRACE: Provádí test zpětné smyčky zprávy podél cesty k cílovému zdroji a poskytuje užitečný mechanismus ladění

OPTIONS: Používá se k popisu možností komunikace pro cílový prostředek, klient může určit adresu URL pro metodu OPTIONS nebo hvězdičku (*) pro označení celého serveru.

HEAD: Žádá o odpověď totožnou s odpovědí GET, ale bez orgánu odpovědí

CONNECT: Vytvoří tunel na server identifikovaný cílovým zdrojem, může být použit k přístupu na webové stránky, které používají protokol SSL (HTTPS)

0
qaautodev