Koks skirtumas tarp POST ir PUT HTTP REQUEST?

Atrodo, kad jie siunčia duomenis į serverį kūno viduje, taigi, kas juos skiria?

569
20 сент. nustatyti fuentesjr 20 sep . 2008-09-20 09:34 '08 at 9:34 2008-09-20 09:34
@ 11 atsakymų

HTTP PUT:

PUT pateikia failą ar resursą konkrečiame URI ir tiksliai toje URI. Jei šiame URI jau yra failas ar išteklius, PUT pakeičia tą failą ar šaltinį. Jei failo ar išteklių nėra, PUT jį sukuria. PUT yra idempotentinis , tačiau paradoksalu, PUT atsakymai nėra saugomi.

HTTP 1.1 RFC vieta PUT

HTTP POST:

POST siunčia duomenis į konkretų URI ir tikisi, kad šio URI šaltinis tvarkys užklausą. Šiuo metu žiniatinklio serveris gali nustatyti, ką daryti su duomenimis nurodyto išteklių kontekste. POST metodas nėra idempotentas , bet POST atsakymai gali būti saugomi, jei serveris nustato atitinkamas „Cache-Control“ ir „Expires“ antraštes.

Oficiali HTTP RFC apibrėžia POST kaip:

  • Esamų išteklių santrauka;
  • Pranešimų skelbimas skelbimų lentoje, naujienų grupėje, adresatų sąraše ar panašioje straipsnių grupėje;
  • Duomenų apdorojimo duomenų, pvz., Formos pateikimo, pateikimas;
  • Išskleiskite duomenų bazę naudodami papildomą operaciją.

HTTP 1.1 vieta RFC, skirtas POST

Skirtumas tarp POST ir PUT:

RFC pats paaiškina pagrindinį skirtumą:

Pagrindinis POST ir PUT užklausų skirtumas atsispindi skirtingose ​​užklausos-URI reikšmėse. POST užklausoje esantis URI identifikuoja šaltinį, kuris tvarkys privatų subjektą. Šis šaltinis gali būti duomenų priėmimo procesas, sąsaja kitam protokolui arba atskiras subjektas, priimantis anotacijas. Priešingai, UUT prašyme PUT nurodo objektą, pridedamą prie užklausos - vartotojo agentas žino, kas yra URI, ir serveris NEGALIMA bandyti taikyti užklausą kitam ištekliui. Jei serveris nori, kad prašymas būtų taikomas kitam URI, jis turi išsiųsti 301 (perkeltą nuolatinį) atsakymą; vartotojas agentas gali pateikti savo sprendimą, ar prašymas turėtų būti nukreiptas.

Naudojant teisingą metodą, kuris nesusijęs:

Vienas iš REST ROA ir SOAP privalumų yra tas, kad, naudojant HTTP REST ROA, jis skatina tinkamai naudoti HTTP veiksmažodžius / metodus. Pvz., Turėtumėte naudoti PUT tik tuo atveju, jei norite sukurti tikslią vietą šioje tikslioje vietoje. Ir jūs niekada nenaudosite GET kurdami ar keisdami šaltinį.

592
20 сент. Atsakymą pateikė Brian R. Bondy 20 sep. 2008-09-20 09:54 '08 at 9:54 2008-09-20 09:54

Tik semantika.

Daroma prielaida, kad HTTP PUT ims užklausos korpusą ir tada saugo jį URI nustatytame ištekliuje.

HTTP POST yra bendresnis. Ji turėtų inicijuoti veiksmą serveryje. Šis veiksmas gali būti, kad užklausos įstaiga būtų saugoma iš išteklių, nustatytų URI, arba gali būti kitokio URI, arba gali būti kitoks veiksmas.

PUT , pvz . Įterptas į URI veikia šį konkretų URI. URI URI gali turėti bet kokį poveikį.

133
20 сент. Atsakymą pateikė Jonathan Arkell rugsėjo 20 d 2008-09-20 09:41 '08 at 9:41 am 2008-09-20 09:41

Jei norite pateikti REST stiliaus išteklių pavyzdžius:

„POST / knygos“ su informacija apie knygą gali sukurti naują knygą ir atsakyti nauju URL, nurodančiu šią knygą: "/ books / 5".

"PUT / books / 5" turės sukurti naują knygą su ID 5 arba pakeisti esamą knygą ID 5.

Ne resursų POST stiliuje galite naudoti beveik viską, kas turi šalutinį poveikį. Kitas skirtumas yra tas, kad PUT turi būti idempotentas - kelios to paties URL duomenų PUT turi būti tikslios, jei keli POST gali sukurti kelis objektus arba kažką, ką daro jūsų POST veiksmas.

84
20 сент. Atsakymas pateikiamas bhollis rugsėjo 20 d 2008-09-20 10:44 '08, 10:44 2008-09-20 10:44

1) GET: - naudojamas, kai klientas prašo išteklių interneto serveryje.

2) HEAD: - naudojamas, kai klientas prašo informacijos apie šaltinį, bet pats nereikalauja išteklių.

3) POST: - naudojamas, kai klientas siunčia informaciją ar duomenis į serverį, pavyzdžiui, užpildo internetinę formą (ty siunčia didelį kiekį sudėtingų duomenų į žiniatinklio serverį).

4) PUT: - Naudojamas, kai klientas siunčia pakaitinį dokumentą arba įkelia naują dokumentą į žiniatinklio serverį pagal užklausos URL.

5) DELETE: - naudojamas, kai klientas bando ištrinti dokumentą iš žiniatinklio serverio, nurodyto užklausos URL adresu.

6) TRACE: - Naudojamas, kai klientas prašo prieinamų prokurorų ar tarpinių serverių, kad pakeistų užklausą, kad galėtų deklaruoti save.

7) GALIMYBĖS: - Naudojamas, kai klientas nori nustatyti kitus galimus metodus dokumento paieškai ar apdorojimui žiniatinklio serveryje.

8) CONNECT: - naudojamas, kai klientas nori sukurti skaidrią ryšį su nuotoliniu kompiuteriu, paprastai norint suteikti SSL šifruotą ryšį (HTTPS) per HTTP proxy serverį.

57
26 мая '14 в 9:14 2014-05-26 09:14 atsakymą pateikė Soheil bijavar gegužės 26 d. 14 d. 9:14 2014-05-26 09:14

PUT suprantamas kaip būdas „įkelti“ medžiagą į konkretų URI arba perrašyti tai, kas jau yra toje URI.

Kita vertus, POST yra būdas siųsti duomenis, susijusius su konkrečiu URI.

Pasiekite HTTP RFC

45
20 сент. Atsakyti Daniel Bruce Rugsėjo 20 2008-09-20 09:36 '08 9:36 am. 2008-09-20 09:36

Kiek aš žinau, PUT dažniausiai naudojamas atnaujinti įrašus.

  • POST - dokumento ar kito šaltinio kūrimas

  • PUT - atnaujinkite sukurtą dokumentą ar bet kurį kitą šaltinį.

Tačiau, kad būtų aišku, kad PUT paprastai „pakeičia“ esamą įrašą, jei jis yra, ir sukuria, jei ten nėra.

34
15 февр. atsakymą pateikė ChanGan vasario 15 d. 2013-02-15 10:02 '13, 10:02 2013-02-15 10:02

Pagal RFC skirtumas tarp PUT ir POST yra užklausos URI. POST identifikuotas URI apibrėžia objektą, kuris apdoros POST užklausą. PUT užklausos URI apima užklausoje esantį objektą. Taigi POST /v1/coffees/orders reiškia naujo šaltinio sukūrimą ir identifikatoriaus grąžinimą, kad būtų aprašytas šaltinis. Priešingai, PUT /v1/coffees/orders/1234 reiškia „ 1234 “ identifikuoto išteklių atnaujinimą, jei jis yra; kitaip sukurkite naują užsakymą ir naudokite orders/1234 URI, kad jį identifikuotumėte.

PUT and POST can both be used to create or update methods. The usage of the method depends on the idempotent behavior expected from the method as well as the location of the resource to identify it.

12
03 авг. Atsakė Mohamed Amine BERGUIGA rugpjūčio 03 d 2015-08-03 13:28 '15, 13:28, 2015-08-03 13:28

Kiti jau paskelbė puikius atsakymus, tik norėjau pridurti, kad daugeliu kalbų, sistemų ir precedentų jums bus daug rūpi, daug dažniau nei PUT. Iki to laiko PUT, DELETE ir kt. Tai daugiausia trivialūs dalykai.

12
20 сент. Atsakyti į Jason Morrison 2008-09-20 11:15 '08 11:15 am. 2008-09-20 11:15

POST laikomas kažkuo panašiu į gamyklą. Su juo įtraukiate duomenis, kad sukurtumėte tai, ko norite, ir viskas, kas yra ant kitos pusės, žino, ką su juo daryti. PUT naudojamas atnaujinti esamus duomenis nurodytu URL adresu arba sukurti kažką naujo, kai žinote, kad bus URI, o dar neegzistuoja (skirtingai nuo POST, kuris sukurs kažką ir prireikus grąžins URL, jei reikia) ).

8
20 сент. atsakymą pateikė user12786 20 sep . 2008-09-20 09:45 '08, 9:45 val. 2008-09-20 09:45

Žr. Http://zacharyvoase.com/2009/07/03/http-post-put-diff/

Neseniai buvau labai erzina populiari netinkama žiniatinklio kūrėjų samprata, kad POST naudojamas kuriant šaltinį, ir PUT naudojamas atnaujinti / keisti.

Jei pažvelgsite į RFC 2616 („Hypertext Transfer Protocol - HTTP / 1.1“) 55 psl ., 9.6 skyrių („PUT“), pamatysite, kad PUT galioja:

PUT metodas reikalauja, kad uždaras objektas būtų saugomas pateiktame užklausos-URI.

Taip pat yra patogi dalis, skirta paaiškinti skirtumą tarp POST ir PUT:

Pagrindinis skirtumas tarp POST ir PUT užklausų atsispindi kitoje užklausos-URI vertėje. POST užklausoje esantis URI identifikuoja šaltinį, kuris tvarkys uždarą objektą. Šis šaltinis gali būti duomenų priėmimo procesas, vartai į kitą protokolą arba atskiras subjektas, priimantis anotacijas. Priešingai, UUT prašyme PUT nurodo objektą, pridėtą prie užklausos - vartotojo agentas žino, kas yra URI, ir serveris NEGALIMA bandyti taikyti užklausą kitam ištekliui.

Jame nieko nekalbama apie skirtumą tarp atnaujinimo / kūrimo, nes nieko apie tai nėra. Apie skirtumą tarp:

 obj.set_attribute(value) # A POST request. 

Ir tai:

 obj.attribute = value # A PUT request. 

Todėl prašome nustoti skleisti šią populiarią klaidingą nuomonę. Perskaitykite savo RFC.

8
05 апр. atsakymą pateikė Najeebul Hasan 05 balandžio. 2014-04-05 13:17 '14, 13:17 2014-04-05 13:17

REST prašo kūrėjų naudoti HTTP metodus aiškiai ir tokiu būdu, kad jie atitiktų protokolo apibrėžimą. Šis pagrindinis REST projektavimo principas sukuria „vienas su vienu“ kartografavimą tarp „HTTP“ operacijų ir metodų, skirtų kurti, skaityti, atnaujinti ir ištrinti (CRUD). Pagal šį žemėlapį:

• Norėdami sukurti resursą serveryje, naudokite POST.

• Norėdami gauti išteklių, naudokite GET.

• Norėdami pakeisti išteklių būklę arba ją atnaujinti, naudokite PUT.

• Norėdami ištrinti arba ištrinti šaltinį, naudokite DELETE.

Daugiau informacijos: „ RESTful Web Services“: „IBM Basics“

5
06 апр. Atsakymą pateikė Long Nguyen balandžio 6 d 2017-04-06 13:38 '17 at 13:38 2017-04-06 13:38

Kiti klausimai apie žymes arba Užduoti klausimą