Jaka jest różnica między POST a PUT HTTP REQUEST?


Odpowiedzi:


893

PUT HTTP:

PUT umieszcza plik lub zasób pod określonym URI i dokładnie pod tym URI. Jeśli pod tym identyfikatorem URI jest już plik lub zasób, PUT zastępuje ten plik lub zasób. Jeśli nie ma tam pliku ani zasobu, PUT tworzy taki plik. PUT jest idempotentny , ale paradoksalnie odpowiedzi PUT nie są buforowane.

Lokalizacja HTTP 1.1 RFC dla PUT

POST HTTP:

POST wysyła dane do określonego URI i oczekuje, że zasób w tym URI obsłuży żądanie. Serwer WWW w tym momencie może określić, co zrobić z danymi w kontekście określonego zasobu. Metoda POST nie jest idempotentna , jednak odpowiedzi POST buforowalne, o ile serwer ustawia odpowiednią kontrolę pamięci podręcznej i wygasa.

Oficjalna HTTP RFC określa POST jako:

  • Adnotacja do istniejących zasobów;
  • Publikowanie wiadomości na tablicy ogłoszeń, grupie dyskusyjnej, liście mailingowej lub podobnej grupie artykułów;
  • Zapewnienie bloku danych, takiego jak wynik przesłania formularza, do procesu przetwarzania danych;
  • Rozszerzanie bazy danych za pomocą operacji dołączania.

Lokalizacja HTTP 1.1 RFC dla testu POST

Różnica między POST a PUT:

Sam RFC wyjaśnia zasadniczą różnicę:

Podstawowa różnica między żądaniami POST i PUT znajduje odzwierciedlenie w innym znaczeniu URI żądania. Identyfikator URI w żądaniu POST identyfikuje zasób, który będzie obsługiwał zamknięty obiekt. Ten zasób może być procesem akceptującym dane, bramą do innego protokołu lub osobnym podmiotem, który przyjmuje adnotacje. W przeciwieństwie do tego, URI w żądaniu PUT identyfikuje encję dołączoną do żądania - agent użytkownika wie, jaki jest URI, a serwer NIE MOŻE próbować zastosować żądania do jakiegoś innego zasobu. Jeśli serwer chce zastosować żądanie do innego identyfikatora URI, MUSI wysłać odpowiedź 301 (Moved Permanently); klient użytkownika MOŻE następnie podjąć własną decyzję dotyczącą tego, czy przekierować żądanie.

Dodatkowo i nieco bardziej zwięźle, RFC 7231 Sekcja 4.3.4 Stany PUT (wyróżnienie dodane),

4.3.4 POŁOŻYĆ

Metoda PUT żąda, aby stan zasobu docelowego był createdlub replacedze stanem zdefiniowanym przez reprezentację zawartą w ładunku komunikatu żądania.

Używając właściwej metody, niepowiązanej na bok:

Jedną z zalet REST ROA w porównaniu z SOAP jest to, że podczas korzystania z HTTP REST ROA zachęca do właściwego użycia czasowników / metod HTTP. Na przykład użyjesz PUT tylko wtedy, gdy chcesz utworzyć zasób w tej właśnie lokalizacji. I nigdy nie użyłbyś GET do utworzenia lub modyfikacji zasobu.


1
Przeczytałem w specyfikacji, że If the Request-URI does not point to an existing resource [...] the origin server *can* create the resource with that URI. Więc wdrożenie PUT, które odmawia utworzenia zasobu, jeśli nie jest obecne, byłoby poprawne, prawda? Jeśli tak, czy dzieje się tak w praktyce? Czy implementacje zwykle również tworzą na PUT?
houcros

1
jakiś dodatkowy wyjątek, który wyraźnie pokazuje różnicę, znajduje się pod następnym adresem URL - dzone.com/articles/put-vs-post
Ashish Shetkar

1
To, czego nie rozumiem, to jak wdrożyć idempotencja PUT. ogólnie większość interfejsów API będzie korzystać z automatycznego generowania identyfikatora w przypadku tworzenia nowego zasobu. i w PUT, powinieneś utworzyć zasób, jeśli nie istnieje, ale użyj identyfikatora określonego w URI, ale jak możesz to zrobić, jeśli metoda generowania identyfikatora jest ustawiona na automatyczną ???
Roni Axelrad

1
Krótko mówiąc: identyfikator URI w żądaniu POST identyfikuje zasób, który będzie obsługiwał zamknięty obiekt . Identyfikator URI w żądaniu PUT identyfikuje samą jednostkę .
Drazen Bjelovuk

Odpowiedzi na metodę POST nie są buforowalne, chyba że odpowiedź zawiera odpowiednie pola nagłówka Kontrola pamięci podręcznej lub wygasa
NattyC

211

Tylko semantyka.

HTTP PUTpowinien zaakceptować treść żądania, a następnie przechowywać go w zasobie określonym przez URI.

HTTP POSTjest bardziej ogólny. Ma zainicjować akcję na serwerze. To działanie może polegać na przechowywaniu treści żądania w zasobie określonym przez identyfikator URI, może to być inny identyfikator URI lub inna akcja.

PUT jest jak przesyłanie pliku. Wprowadzenie do identyfikatora URI wpływa dokładnie na ten identyfikator URI. POST do identyfikatora URI może mieć jakikolwiek efekt.


To, co implikuje pewną funkcję, może w rzeczywistości nie być
TaylorMac

131

Aby podać przykłady zasobów w stylu REST:

„POST / books” z dużą ilością informacji o książce może utworzyć nową książkę i odpowiedzieć nowym adresem URL identyfikującym tę książkę: „/ books / 5”.

„PUT / books / 5” musiałoby albo utworzyć nową książkę o identyfikatorze 5, albo zastąpić istniejącą książkę ID 5.

W stylu innym niż POST można używać POST do wszystkiego, co ma efekt uboczny. Inna różnica polega na tym, że PUT powinien być idempotentny - wiele PUT tych samych danych do tego samego adresu URL powinno być w porządku, a wiele POST może tworzyć wiele obiektów lub cokolwiek to robi twoja akcja POST.


Cześć Bhollis, Co się stanie, jeśli użyję POST / books / 5? czy wyrzuci zasób nie znaleziony?
ChanGan

13
Uważam, że idempotencja jest najbardziej wyróżniającą się i najważniejszą różnicą między PUT a POST
Martin Andersson

1
Cześć ChanGan, oto wyjaśnienie Wikipedii na temat twojego przypadku „POST / books / 5”: „Nie jest powszechnie używany. Traktuj adresowanego członka jako odrębną kolekcję i stwórz w niej nowy wpis”.
rdiachenko

ta odpowiedź sprawia wrażenie, że PUT i POST można zdefiniować na tym samym zasobie, jednak inną różnicą obok idempotencji jest to, kto kontroluje przestrzeń ID. W PUT użytkownik kontroluje przestrzeń identyfikatora, tworząc zasoby o określonym identyfikatorze. W POST serwer zwraca identyfikator, do którego użytkownik powinien się odwoływać w kolejnych wywołaniach, takich jak GET. Powyższe jest dziwne, ponieważ jest mieszanką obu.
Tommy

74
  1. GET : pobiera dane z serwera. Nie powinien mieć żadnego innego efektu.
  2. POST : Wysyła dane do serwera w celu utworzenia nowego obiektu. Często używany podczas przesyłania pliku lub formularza internetowego.
  3. PUT : Podobne do POST, ale używane do zastąpienia istniejącej jednostki.
  4. PATCH : podobny do PUT, ale używany do aktualizowania tylko niektórych pól w istniejącej jednostce.
  5. DELETE : Usuwa dane z serwera.
  6. ŚLEDZENIE : Zapewnia sposób na sprawdzenie, co serwer odbiera. Zwraca tylko to, co zostało wysłane.
  7. OPCJE : Pozwala klientowi uzyskać informacje o metodach żądania obsługiwanych przez usługę. Odpowiednim nagłówkiem odpowiedzi jest Zezwalaj z obsługiwanymi metodami. Używany również w CORS jako żądanie wstępnego sprawdzenia w celu poinformowania serwera o rzeczywistej metodzie żądania i zapytania o niestandardowe nagłówki.
  8. HEAD : Zwraca tylko nagłówki odpowiedzi.
  9. CONNECT : Używany przez przeglądarkę, gdy wie, że komunikuje się z serwerem proxy, a ostateczny identyfikator URI zaczyna się od https: //. CONNECT ma na celu umożliwienie szyfrowanej sesji TLS typu end-to-end, więc dane są nieczytelne dla proxy.

9
najlepsza krótka odpowiedź
vibs2006,

Czy CONNECT jest uruchamiany przed każdym żądaniem podczas korzystania z protokołu https?
zmienna

66

PUT jest rozumiany jako metoda „przesyłania” rzeczy do określonego URI lub nadpisywania tego, co już jest w tym URI.

Z drugiej strony, POST to sposób przesyłania danych ZWIĄZANYCH z danym URI.

Zobacz RFC HTTP


45

O ile mi wiadomo, PUT służy głównie do aktualizacji rekordów.

  1. POST - Aby utworzyć dokument lub dowolny inny zasób

  2. PUT - Aby zaktualizować utworzony dokument lub dowolny inny zasób.

Ale dla jasności w tym PUT zwykle „zastępuje” istniejący rekord, jeśli istnieje i tworzy, jeśli go nie ma.


1
Co to jest zapis w tym kontekście? Pytanie dotyczy żądania HTTP.
Kishore,

Co zrobiłby POST, jeśli dokument / zasób jest już obecny? Czy zgłosi błąd, czy po prostu zgaśnie?
Aditya Pednekar

Na podstawie większości tego, co przeczytałem, PUT może również tworzyć.
aderchox

19

Inni już opublikowali doskonałe odpowiedzi, chciałem tylko dodać, że z większością języków, frameworków i przypadków użycia będziesz mieć do czynienia z POST znacznie, znacznie częściej niż PUT. Do tego stopnia, że ​​PUT, DELETE itp. Są w zasadzie pytaniami ciekawostki.


15

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

Ostatnio denerwuje mnie popularne błędne przekonanie twórców stron internetowych, że POST służy do tworzenia zasobu, a PUT służy do jego aktualizacji / zmiany.

Jeśli spojrzysz na stronę 55 RFC 2616 („Protokół przesyłania hipertekstu - HTTP / 1.1”), sekcja 9.6 („PUT”), zobaczysz, dla czego PUT jest w rzeczywistości:

Metoda PUT żąda, aby zamknięta jednostka była przechowywana pod dostarczonym URI żądania.

Jest też przydatny akapit wyjaśniający różnicę między testami POST i PUT:

Podstawowa różnica między żądaniami POST i PUT znajduje odzwierciedlenie w innym znaczeniu URI żądania. Identyfikator URI w żądaniu POST identyfikuje zasób, który będzie obsługiwał zamknięty obiekt. Ten zasób może być procesem akceptującym dane, bramą do innego protokołu lub osobnym podmiotem, który przyjmuje adnotacje. W przeciwieństwie do tego, URI w żądaniu PUT identyfikuje encję dołączoną do żądania - agent użytkownika wie, jaki jest URI, a serwer NIE MOŻE próbować zastosować żądania do jakiegoś innego zasobu.

Nie wspomina nic o różnicy między aktualizacją / tworzeniem, ponieważ nie o to chodzi. Chodzi o różnicę między tym:

obj.set_attribute(value) # A POST request.

I to:

obj.attribute = value # A PUT request.

Więc proszę, powstrzymaj rozprzestrzenianie się tego popularnego nieporozumienia. Przeczytaj swoje RFC.


13
Wydaje się to bezcelowe i niegrzeczne i pedantyczne w mało użyteczny sposób. W przytoczonym przez Ciebie PUT nowa jednostka jest w RESTful API „nowym” rekordem - i jest dostępna w tym miejscu. Wątpliwe jest, czy dobrym pomysłem jest umożliwienie podrzędnym członkom modyfikowanie się w ten sposób (myślę, że to nie jest idealne), ale nawet gdyby tak było, używasz podgatunku do atakowania wielu przydatnych informacji. Zazwyczaj opis, jak zwykle się podaje, jest świetnym stwierdzeniem zarówno treści RFC, w skrócie, jak i stwierdzeniem zwykłej i zwyczajowej praktyki. Ponadto nie zaszkodzi ci być uprzejmym.
narzędzia

3
Nie można tego wystarczająco wysoko ocenić. PUT nie ma miejsca w interfejsie API REST. W większości przypadków POST wskazuje prawidłową semantykę.
Beefster,

Nie powiedziane dobrze, ale w rzeczywistości dokładna interpretacja RFC. Wygląda na to, że świat twórców stron internetowych jest bardzo bagienny dezinformacji.
William T Froggard

@Beefster Nie ma czegoś takiego jak „POST wskazuje”. Najeebul zrobił tutaj świetny punkt. Jak obliczyć, co to oznacza? poza tym, że po prostu go używasz, ponieważ zawsze używałeś go w ten sposób od pierwszego dnia, kiedy się go nauczyłeś, ale tak naprawdę nie wiesz, dlaczego powinieneś go używać w porównaniu do innych?
Mosia Thabo

12

Test POST jest uważany za metodę typu fabrycznego. Dołączasz do niego dane, aby tworzyć to, czego chcesz, a wszystko, co jest po drugiej stronie, wie, co z tym zrobić. PUT służy do aktualizowania istniejących danych pod danym adresem URL lub do tworzenia czegoś nowego, gdy wiesz, jaki będzie URI i jeszcze go nie ma (w przeciwieństwie do POST, który coś utworzy i zwróci adres URL do jeśli to konieczne).


10

REST prosi programistów o jawne stosowanie metod HTTP w sposób zgodny z definicją protokołu. Ta podstawowa zasada projektowania REST ustanawia mapowanie jeden na jeden między operacjami tworzenia, odczytu, aktualizacji i usuwania (CRUD) a metodami HTTP. Zgodnie z tym mapowaniem:

• Aby utworzyć zasób na serwerze, użyj POST.

• Aby pobrać zasób, użyj GET.

• Aby zmienić stan zasobu lub zaktualizować go, użyj PUT.

• Aby usunąć lub usunąć zasób, użyj DELETE.

Więcej informacji: RESTful Web Services: podstawy od IBM


Myślę, że masz PUT i POST do tyłu
Beefster

@Beefster Post, aby utworzyć, zaktualizować, prawda?
Długi Nguyen

Nie. PUT służy do umieszczania dosłownej treści pod adresem URL i rzadko ma swoje miejsce w interfejsie API REST. POST jest bardziej abstrakcyjny i obejmuje wszelkiego rodzaju dodawanie treści, które nie mają semantyki „Umieść dokładnie ten plik pod tym samym adresem URL”.
Beefster,

7

Zastosowanie jednego lub drugiego powinno być dość proste, ale złożone sformułowania są dla wielu z nas źródłem zamieszania.

Kiedy ich używać:

  • Użyj, PUTgdy chcesz zmodyfikować pojedynczy zasób, który jest już częścią kolekcji zasobów. PUTzastępuje zasób w całości. Przykład:PUT /resources/:resourceId

    Sidenote: Użyj, PATCHjeśli chcesz zaktualizować część zasobu.


  • Użyj, POSTgdy chcesz dodać zasób podrzędny do zbioru zasobów.
    Przykład:POST => /resources

Ogólnie:

  • Zasadniczo w praktyce zawsze używaj PUTdo operacji UPDATE .
  • Zawsze używaj POSTdo operacji UTWÓRZ .

Przykład:

GET / firma / raporty => Pobierz wszystkie raporty
GET / firma / raporty / {id} => Uzyskaj informacje o raporcie identyfikowane przez „id”
POST / firma / raporty => Utwórz nowy raport
PUT / firma / raporty / {id} => Zaktualizuj informacje o raporcie oznaczone „id”
PATCH / firma / raporty / {id} => Zaktualizuj część informacji o raporcie zidentyfikowanym przez „id”
DELETE / firma / raporty / {id} => Usuń raport za pomocą „id”


4

Różnica między POST a PUT polega na tym, że PUT jest idempotentny, co oznacza, że ​​wielokrotne wywołanie tego samego żądania PUT zawsze da ten sam wynik (to nie jest efektem ubocznym), podczas gdy z drugiej strony wielokrotne wywoływanie żądania POST może mieć ( dodatkowe) skutki uboczne wielokrotnego tworzenia tego samego zasobu.

GET : Żądania za pomocą GET pobierają tylko dane, to znaczy żąda reprezentacji określonego zasobu

POST: Wysyła dane do serwera, aby utworzyć zasób. Typ treści żądania jest wskazywany przez nagłówek Content-Type. Często powoduje zmianę stanu lub skutki uboczne na serwerze

PUT : Tworzy nowy zasób lub zastępuje reprezentację zasobu docelowego ładunkiem żądania

PATCH : Służy do stosowania częściowych modyfikacji zasobu

DELETE : Usuwa określony zasób

TRACE : Wykonuje test pętli zwrotnej wiadomości wzdłuż ścieżki do zasobu docelowego, zapewniając użyteczny mechanizm debugowania

OPTIONS : Służy do opisywania opcji komunikacji dla zasobu docelowego, klient może określić adres URL dla metody OPTIONS lub gwiazdkę (*), aby odnosić się do całego serwera.

HEAD : Pyta o odpowiedź identyczną z odpowiedzią na żądanie GET, ale bez treści odpowiedzi

CONNECT : Ustanawia tunel do serwera zidentyfikowanego przez zasób docelowy, może być używany do uzyskiwania dostępu do stron internetowych korzystających z SSL (HTTPS)


2

Wykorzystanie REST

POST służy do utworzenia nowego zasobu, a następnie zwraca zasób URI

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

To połączenie może utworzyć nową książkę i zwrócić tę książkę URI

Response ...THE-NEW-RESOURCE-URI/books/5

PUT służy do zastąpienia zasobu, jeśli taki zasób istnieje, po prostu go zaktualizuj, ale jeśli ten zasób nie istnieje, utwórz go,

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

Gdy PUTwiemy, identyfikator zasobu, ale POSTzwróci nowy identyfikator zasobu

Wykorzystanie niezgodne z REST

POST służy do zainicjowania akcji po stronie serwera, ta akcja może, ale nie musi tworzyć zasób, ale ta akcja będzie miała wpływ na stronę, zawsze zmieni coś na serwerze

PUT służy do umieszczania lub zastępowania dosłownych treści pod określonym adresem URL

Kolejna różnica w obu stylach REST-ful i nie REST-ful

POST jest operacją niebędącą idempotentną: spowoduje kilka zmian, jeśli zostanie wykonana wiele razy z tym samym żądaniem.

PUT jest Idempotentna Operacja: Nie wywoła żadnych skutków ubocznych, jeśli zostanie wykonana wielokrotnie z tym samym żądaniem.


1

Warto wspomnieć, że POSTjest przedmiotem częstych ataków typu Cross-Site Request Forgery (CSRF), podczas gdy PUTtak nie jest.

Poniższe CSRF niePUTmożliwe w przypadku wizyty ofiary attackersite.com.

Skutkiem ataku jest to, że poszkodowany nieumyślnie usunie użytkownika tylko dlatego, że (ofiara) został zalogowany jako adminon target.site.com, zanim wizyty attackersite.com:

Normalne żądanie (pliki cookie są wysyłane): ( PUTnie jest obsługiwaną wartością atrybutu)

Kod na attackersite.com:

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

Żądanie XHR (pliki cookie są wysyłane): ( PUTwywołałoby żądanie inspekcji wstępnej, którego odpowiedź uniemożliwiłaby przeglądarce żądanie deleteUserstrony)

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

1

W prostych słowach możesz powiedzieć:

1.HTTP Get: służy do uzyskania jednego lub więcej przedmiotów

2.HTTP Post: Służy do tworzenia elementu

3.HTTP Put: Służy do aktualizacji elementu

4.HTTP Patch: Służy do częściowej aktualizacji przedmiotu

5.HTTP Delete: Służy do usuwania elementu


0

W rzeczywistości nie ma różnicy poza ich tytułem. W rzeczywistości istnieje podstawowa różnica między GET a innymi. Metodą „GET” -Request wysyłasz dane w wierszu adresu url, które są najpierw oddzielone znakiem zapytania, a następnie znakiem &.

Ale przy użyciu metody żądania „POST” nie można przekazywać danych przez adres URL, ale należy przekazać dane jako obiekt w tak zwanym „ciele” żądania. Po stronie serwera musisz następnie odczytać treść otrzymanej treści, aby otrzymać przesłane dane. Ale z drugiej strony nie ma możliwości wysyłania treści w treści, gdy wysyłasz żądanie „GET”.

Twierdzenie, że „GET” służy wyłącznie do uzyskiwania danych, a „POST” służy do publikowania danych, jest całkowicie błędne. Nikt nie może zabronić Ci tworzenia nowych treści, usuwania istniejących treści, edytowania istniejących treści lub robienia czegokolwiek w backendie, na podstawie danych wysyłanych przez żądanie „GET” lub żądanie „POST”. I nikt nie może zapobiec kodowaniu backendu w taki sposób, że przy żądaniu „POST” klient prosi o pewne dane.

Z żądaniem, bez względu na to, z której metody korzystasz, wywołujesz adres URL i wysyłasz lub nie wysyłasz niektórych danych w celu określenia, które informacje chcesz przekazać do serwera w celu obsługi Twojego żądania, a następnie klient otrzymuje odpowiedź od serwer. Dane mogą zawierać wszystko, co chcesz wysłać, backend może robić z danymi wszystko, co chcesz, a odpowiedź może zawierać dowolne informacje, które chcesz tam umieścić.

Istnieją tylko te dwie PODSTAWOWE METODY. POBIERZ i POST. Ale to ich struktura sprawia, że ​​są różne, a nie to, co kodujesz w backendie. W backendie możesz kodować, co chcesz, z otrzymanymi danymi. Ale w przypadku żądania „POST” musisz wysłać / pobrać dane w ciele, a nie w linii adresu URL, a w przypadku żądania „GET” musisz wysłać / pobrać dane w linii adresu URL, a nie w Ciało. To wszystko.

Wszystkie pozostałe metody, takie jak „PUT”, „DELETE” i tak dalej, mają taką samą strukturę jak „POST”.

Metoda POST jest używana głównie, jeśli chcesz nieco ukryć treść, ponieważ wszystko, co napiszesz w linii adresu URL, zostanie zapisane w pamięci podręcznej, a metoda GET jest taka sama, jak zapisanie linii adresu URL z danymi. Więc jeśli chcesz wysyłać poufne dane, które nie zawsze są koniecznie nazwą użytkownika i hasłem, ale na przykład niektórymi identyfikatorami lub skrótami, których nie chcesz wyświetlać w wierszu adresu URL, powinieneś użyć metody POST .

Również długość adresu URL jest ograniczona do 1024 symboli, podczas gdy metoda „POST” nie jest ograniczona. Więc jeśli masz większą ilość danych, możesz nie być w stanie wysłać ich z żądaniem GET, ale będziesz musiał użyć żądania POST. Jest to więc kolejny plus dla żądania POST.

Ale obsługa żądania GET jest znacznie łatwiejsza, gdy nie masz skomplikowanego tekstu do wysłania. W przeciwnym razie, a jest to kolejny plus dla metody POST, jest to, że w metodzie GET musisz zakodować tekst w url, aby móc wysyłać niektóre symbole w tekście, a nawet spacje. Ale dzięki metodzie POST nie masz żadnych ograniczeń, a twoja treść nie musi być w żaden sposób zmieniana ani manipulowana.


0

Zarówno PUT, jak i POST są metodami spoczynkowymi.

PUT - Jeśli dwukrotnie wykonamy to samo żądanie przy użyciu PUT przy użyciu tych samych parametrów za każdym razem, drugie żądanie nie będzie miało żadnego efektu. Właśnie dlatego PUT jest zwykle używany w scenariuszu aktualizacji, wywoływanie aktualizacji więcej niż raz z tymi samymi parametrami nie robi nic więcej niż połączenie początkowe, dlatego PUT jest idempotentny.

POST nie jest idempotentny, na przykład Create utworzy dwa osobne wpisy w celu, dlatego nie jest idempotentny, więc CREATE jest szeroko stosowany w POST.

Wykonanie tego samego wywołania za pomocą POST z tymi samymi parametrami za każdym razem spowoduje dwie różne rzeczy, dlatego też POST jest powszechnie używany w scenariuszu Utwórz

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.