Być może słyszałeś o żądaniach GET i POST, ale to dopiero początek.
Każde żądanie HTTP wykorzystuje metodę opisującą jego zasadniczy cel. Każda metoda ma określone zastosowania do zadań, od pobierania strony internetowej po usuwanie zasobu. GET i POST to dwa najbardziej znane, ale jest jeszcze siedem innych.
Poznaj tę koncepcję i dowiedz się, do czego służy każda z dziewięciu możliwych metod HTTP.
Co to jest metoda HTTP?
Każde wysyłane żądanie HTTP zawiera czynność i cel tej czynności, podobnie jak czasownik i rzeczownik, które działają jak dopełnienie.
Adres URL identyfikuje unikalny zasób, który działa jako cel żądania. Tymczasem czasownik — jakie działanie wykonać na tym adresie URL — jest reprezentowany przez metodę.
Pierwszy wiersz żądania HTTP zawiera najważniejsze informacje, w tym wersję HTTP, adres URL zasobu i metodę żądania:
GET /software/htp/cics/index.html HTTP/1.1
Jakie są 9 metody HTTP?
Pierwsze cztery metody są odpowiednikami czterech akcji z modelu CRUD: Create, Read, Update i Delete. Odpowiednie metody HTTP to POST, DOSTAWAĆ, UMIEŚCIĆ, I USUWAĆ.
DOSTAWAĆ
Najczęstsze, domyślne żądanie, które wysyłasz podczas przeglądania sieci i klikania linków lub żądania danych za pośrednictwem interfejsu API. Serwer powinien zwrócić zasób w treści odpowiedzi.
POST
Użyj POST do tworzenia nowych zasobów, zwłaszcza gdy te zasoby mają możliwy do zidentyfikowania zasób nadrzędny. Na przykład, jeśli masz zasób /clients, powinieneś utworzyć nowego klienta, przesyłając wymagane dane do /clients.
UMIEŚCIĆ
Zaktualizuj lub zastąp istniejący zasób. Jest to podobne do POST, ale klient jest odpowiedzialny za wybór unikalnego identyfikatora zasobu. Aby utworzyć zasób za pomocą PUT, adres URL zasobu powinien zawierać identyfikator, na przykład /clients/007.
USUWAĆ
Użyj tej metody, aby usunąć zasób określony w adresie URL. Podobnie jak w przypadku wszystkich metod HTTP, wsparcie zależy od serwera. Może pozwolić każdemu usunąć zasób, chociaż byłoby to oczywiście ryzykowne. Serwer obsługujący DELETE zwykle wymaga uwierzytelnianie i autoryzacja.
Dwie inne metody zapewniają niewielkie różnice w stosunku do powyższego: SKRAWEK I GŁOWA. Mogą okazać się przydatne podczas korzystania z niektórych interfejsów API lub tworzenia własnych.
SKRAWEK
Metoda PATCH aktualizuje istniejący zasób za pomocą tylko częściowych danych. Innymi słowy, nie musisz podawać pełnej reprezentacji nowego zasobu, tylko pola, które chcesz zaktualizować.
GŁOWA
Żądanie HEAD jest używane, gdy chcesz uzyskać informacje o zasobie, ale nie o samym zasobie. Odpowiedź nie będzie zawierała treści, ale będzie zawierała zestaw przydatnych nagłówków HTTP. Całkowity rozmiar pliku można sprawdzić przed jego pobraniem, korzystając z nagłówka odpowiedzi Content-Length.
Pozostałe metody—OPCJE, ŁĄCZYĆ, I NAMIERZAĆ– są bardziej niejasne. Zajmują się metadanymi, tworzeniem sieci i rozwiązywaniem problemów. Mogą ci się przydać w niektórych rodzajach programowania, ale prawdopodobnie nie będziesz ich używać na co dzień.
OPCJE
Serwer powinien odpowiedzieć na tę metodę, informując, które metody HTTP faktycznie obsługuje dany zasób. Może to być przydatne do odkrywania.
ŁĄCZYĆ
Niektóre typy oprogramowania sieciowego mogą używać tej metody do ustanawiania tunelu między dwoma komputerami. Jest to często używane do inicjowania połączenia HTTPS przez serwer proxy.
NAMIERZAĆ
Ta metoda jest przydatna do rozwiązywania problemów. Po jej otrzymaniu serwer powinien odesłać otrzymane żądanie w treści odpowiedzi. Metoda zapewnia mechanizm sprawdzania, czy maszyny pośrednie zmieniły jakieś szczegóły żądania.
GET i HEAD to jedyne dwie metody obsługiwane przez każdy ogólny serwer WWW. Konkretny serwer może, ale nie musi, obsługiwać inne metody, dlatego najpierw należy to sprawdzić.
Kiedy możesz użyć tych metod?
Przez większość czasu metody HTTP będą dla Ciebie przejrzyste. Musisz je jednak wziąć pod uwagę, jeśli dodasz formularz do strony internetowej lub użyjesz interfejsu API.
Metody HTTP w HTML
The formularz elementy metoda atrybut pozwala ustawić metodę HTTP, która ma być używana podczas przesyłania formularza. HTML obsługuje tylko post I Dostawać wartości tego atrybutu — plus niejasna alternatywa w oknie dialogowym.
<formularzmetoda="post">
...
formularz>
Możesz użyć funkcji takich jak Narzędzia programistyczne Chrome obejrzeć Sieć ruchu i potwierdź metodę wysyłaną przez Twoją przeglądarkę dla konkretnego żądania. Pamiętaj, że większość formularzy internetowych wysyła POST, ponieważ zwykle aktualizują one dane na serwerze. Jednak wiele formularzy wyszukiwania używa GET, ponieważ po prostu pobierają dane bez ich zmiany.
Ponieważ dane POST nie są częścią adresu URL, są bardziej prywatne niż w przypadku wysłania ich przez GET. Dane nadal istnieją w treści żądania, gdzie teoretycznie atakujący może je przechwycić. Ale wysyłanie danych przez HTTPS powinno złagodzić ten problem.
Nigdy nie należy implementować logowania użytkownika za pomocą żądań GET. Nawet jeśli logowanie może wydawać się bardziej operacją odczytu niż tworzeniem lub aktualizacją, nadal musisz użyć metody POST, aby zabezpieczyć dane.
Ponieważ formularze HTML obsługują tylko metody GET i POST, nie można bezpośrednio utworzyć formularza, który na przykład usuwa zasób z serwera. Typowym obejściem, które przestrzega zasad REST na serwerze, jest użycie zmiennej zastępczej i udawanie, że była to oryginalna metoda HTTP. Na przykład:
<formularzmetoda="post">
<wejścietyp="ukryty"nazwa="_metoda"wartość="USUWAĆ" />
...
formularz>
Twój kod po stronie serwera może sprawdzać obecność tej zmiennej „metody proxy” i traktować ją tak, jakby była to rzeczywista zastosowana metoda. Na przykład w PHP:
$metoda = $_SERWER[„PROŚBA_METODA”];
Jeśli (tablica_klucz_istnieje("_metoda", $_REQUEST)) {
$metoda = $_ŻĄDANIE["_metoda"];
}
Programowe wysyłanie żądań HTTP
Interfejs Web Fetch API udostępnia funkcję JavaScript fetch(), której można użyć do wysłania żądania HTTP. Obsługuje pełen zakres metod, nie tylko GET i POST obsługiwanych przez HTML.
Funkcja pobierania domyślnie wyśle żądanie GET. Aby użyć innej metody, określ jej nazwę jako wartość a metoda właściwość w obiekcie, który wysyłasz jako drugi argument.
aportować(' https://example.com/', { metoda: "GŁOWA" });
Możesz także wysyłać żądania HTTP z wielu języków po stronie serwera, w tym PHP. W tym języku biblioteka curl jest powszechnym sposobem wysyłania takich żądań.
Biblioteka curl ma opcję CURLOPT_CUSTOMREQUEST, którą można ustawić, aby określić metodę
Jeśli ($ch = curl_init($url)) {
curl_setopt($ ch, CURLOPT_CUSTOMREQUEST, 'UMIEŚCIĆ');
curl_exec($ch);
// ...
}
Za pomocą wiersza poleceń
Narzędzie wiersza poleceń curl umożliwia przesyłanie danych do lub z serwera za pośrednictwem jednego z kilku protokołów. HTTP (i HTTPS) to dwa bardzo częste przypadki użycia.
Domyślnie curl wysyła żądanie GET, co możesz potwierdzić za pomocą następującego polecenia:
curl -v -s -o /dev/null example.com/get-test
Możesz zobaczyć metodę żądania w piątym wierszu danych wyjściowych:
Możesz zmienić metodę żądania wysyłaną przez curl za pomocą flagi -X:
curl -v -s -o /dev/null example.com/get-test -X POST
Teraz curl wysyła żądanie przy użyciu metody POST:
HTTP ma wiele zastosowań
Większość tego, co robisz w Internecie, będzie obejmować standardowe żądania GET, z okazjonalnymi POST do przesyłania formularzy. Ale HTTP jest znacznie bardziej ekspresyjnym protokołem, niż to sugeruje.
Niektóre z najpopularniejszych metod odzwierciedlają model CRUD, co sprawia, że HTTP jest doskonałą podstawą do zbudowania interfejsu API skoncentrowanego na zasobach.