Може би сте чували за GET и POST заявки, но те са само началото.
Всяка HTTP заявка използва метод, за да опише основната си цел. Всеки метод има специфични приложения за задачи, вариращи от извличане на уеб страница до изтриване на ресурс. GET и POST са двете най-познати, но има седем други.
Научете за тази концепция и за какво служи всеки от деветте възможни HTTP метода.
Какво е HTTP метод?
Всяка HTTP заявка, която правите, включва действие и цел за това действие, подобно на глагол и съществително, които действат като обект.
URL адресът идентифицира уникален ресурс, действащ като цел на заявката. Междувременно глаголът - какво действие да се извърши върху този URL адрес - е представен от метод.
Първият ред на HTTP заявка предоставя най-важната информация, включително HTTP версията, URL адреса на ресурса и метода на заявката:
ВЗЕМЕТЕ /software/htp/cics/index.html HTTP/1.1
Какви са 9-те HTTP метода?
Първите четири метода са еквиваленти на четирите действия от модела CRUD: Създаване, Четене, Актуализиране и Изтриване. Съответните HTTP методи са ПУБЛИКУВАНЕ, ВЗЕМЕТЕ, СЛАГАМ, и ИЗТРИЙ.
ВЗЕМЕТЕ
Най-честата заявка по подразбиране, която ще изпратите, когато сърфирате в мрежата и щраквате върху връзки или изисквате данни чрез API. Сървърът трябва да върне ресурса в тялото на отговора.
ПУБЛИКУВАНЕ
Използвайте POST за създаване на нови ресурси, особено когато тези ресурси имат идентифицируем родителски ресурс. Например, ако имате ресурс /clients, трябва да създадете нов клиент, като изпратите POST изискваните данни в /clients.
СЛАГАМ
Актуализирайте или заменете съществуващ ресурс. Това е подобно на POST, но клиентът е отговорен за избора на уникален идентификатор за ресурса. За да създадете ресурс с помощта на PUT, URL адресът на ресурса трябва да включва идентификатор, например, /clients/007.
ИЗТРИЙ
Използвайте този метод, за да изтриете ресурса, който сте посочили в URL адреса. Както всички HTTP методи, поддръжката се свежда до сървъра. Може да позволи на всеки да изтрие ресурс, въпреки че това очевидно би било рисковано. Сървър, който поддържа DELETE, обикновено изисква удостоверяване и оторизация.
Два други метода предоставят леки вариации на горното: КРЕПКА и ГЛАВА. Може да ги намерите за полезни, когато използвате определени API или ако създавате свои собствени.
КРЕПКА
Методът PATCH актуализира съществуващ ресурс само с частични данни. С други думи, не е необходимо да предоставяте пълното представяне на новия ресурс, а само полетата, които трябва да актуализирате.
ГЛАВА
Заявка HEAD е, когато искате информация за ресурс, но не и самия ресурс. Отговорът няма да включва тяло, но ще съдържа набор от полезни HTTP заглавки. Можете да разберете общия размер на файл, преди да го изтеглите, чрез заглавката на отговора Content-Length.
Останалите методи -НАСТРОИКИ, СВЪРЗВАНЕ, и СЛЕДИ– са по-неясни. Те се занимават с метаданни, работа в мрежа и отстраняване на проблеми. Може да ги намерите полезни при определени видове програмиране, но вероятно няма да ги използвате всеки ден.
НАСТРОИКИ
Сървърът трябва да отговори на този метод, като ви каже кои HTTP методи всъщност поддържа ресурсът. Това може да бъде полезно за откриване.
СВЪРЗВАНЕ
Някои типове мрежов софтуер могат да използват този метод за установяване на тунел между два компютъра. Това често се използва за иницииране на HTTPS връзка чрез прокси.
СЛЕДИ
Този метод е полезен за отстраняване на проблеми. При получаването му сървърът трябва да изпрати обратно заявката, която е получил в тялото на отговора. Методът осигурява механизъм за проверка дали междинните машини са променили някакви детайли на заявката.
GET и HEAD са единствените два метода, които всеки общ уеб сървър поддържа. Конкретен сървър може или не може да поддържа други методи, така че първо трябва да проверите.
Кога можете да използвате тези методи?
През повечето време HTTP методите ще бъдат прозрачни за вас. Ще трябва обаче да ги вземете предвид, ако добавите формуляр към уеб страница или използвате API.
HTTP методи в HTML
The форма елементи метод атрибут ви позволява да зададете HTTP метода, който да използвате, когато формулярът се изпраща. HTML поддържа само пост и получавам стойности за този атрибут - плюс неясна диалогова алтернатива.
<формаметод="пост">
...
форма>
Можете да използвате функции като Инструменти за разработчици на Chrome за разглеждане мрежа трафик и потвърдете метода, който вашият браузър изпраща за конкретна заявка. Имайте предвид, че повечето уеб формуляри ще изпратят POST, тъй като те обикновено актуализират данните на сървъра. Много форми за търсене обаче използват GET, тъй като те просто извличат данни, без да ги променят.
Тъй като POST данните не са част от URL адреса, те са по-поверителни, отколкото ако ги изпратите чрез GET. Данните все още съществуват в тялото на заявката, където на теория нападател може да ги прихване. Но изпращането на данни чрез HTTPS трябва да смекчи този проблем.
Никога не трябва да прилагате потребителско влизане с GET заявки. Въпреки че влизането може да изглежда по-скоро като операция за четене, отколкото като създаване или актуализиране, все пак трябва да използвате POST, за да защитите данните.
Тъй като HTML формулярите поддържат само GET и POST, не можете директно да създадете формуляр, който например изтрива ресурс на сървъра. Обичайно заобиколно решение, което зачита принципите на REST на сървъра, е да се използва заместваща променлива и да се преструва, че това е оригиналният HTTP метод. Например:
<формаметод="пост">
<входТип="скрит"име="_метод"стойност="ИЗТРИЙ" />
...
форма>
Вашият код от страна на сървъра може да проверява за наличието на тази променлива „прокси метод“ и да я третира като истински използвания метод. Например в PHP:
$method = $_SERVER[„REQUEST_METHOD“];
ако (масив_ключ_съществува("_метод", $_REQUEST)) {
$method = $_REQUEST["_метод"];
}
Програмно изпращане на HTTP заявки
API за уеб извличане предоставя функция fetch() JavaScript, която можете да използвате за изпращане на HTTP заявка. Той поддържа пълния набор от методи, не само GET и POST, които HTML поддържа.
Функцията за извличане ще изпрати GET заявка по подразбиране. За да използвате различен метод, посочете името му като стойност за a метод свойство в обект, който изпращате като втори аргумент.
извличане (' https://example.com/', { метод: "ГЛАВА" });
Можете също да изпращате HTTP заявки от много сървърни езици, включително PHP. На този език библиотеката curl е обичаен начин за изпращане на такива заявки.
Библиотеката curl има опция CURLOPT_CUSTOMREQUEST, която можете да зададете, за да посочите метод
ако ($ch = curl_init($url)) {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'СЛАГАМ');
curl_exec($ch);
// ...
}
Чрез командния ред
Инструментът за команден ред curl ви позволява да прехвърляте данни към или от сървър, чрез един от няколко протокола. HTTP (и HTTPS) са два много често срещани случая на употреба.
По подразбиране curl изпраща GET заявка, както можете да потвърдите със следната команда:
curl -v -s -o /dev/null example.com/get-test
Можете да видите метода на заявката на петия ред на изхода:
Можете да промените метода на заявка, който curl изпраща, като използвате флага -X:
curl -v -s -o /dev/null example.com/get-test -X POST
Сега curl изпраща заявка, използвайки метода POST:
HTTP има много приложения
Повечето от това, което правите в мрежата, ще включва стандартни GET заявки, с случайни POST за изпращане на формуляри. Но HTTP е много по-изразителен протокол, отколкото това предполага.
Някои от най-разпространените методи отразяват модела CRUD, което прави HTTP отлична основа за изграждане на API, фокусиран върху ресурсите.