# Методи за HTTP заявка

HTTP дефинира набор от методи за заявка, за да посочи желаното действие, което да бъде извършено за даден ресурс. Всеки от тях изпълнява различна семантика, но някои общи характеристики се споделят от група от тях: напр. метод на заявка може да бъде безопасен, идемпотентен или кеширащ.

### GET

Методът GET изисква предоставяне на посочия ресурс. Заявките, използващи GET, трябва да извличат само данни.

Твърди се, че това е безопасен метод, тъй като не променя състоянието на ресурса. Методът GET е идемпотентен. Следователно извикването на този метод многократно винаги ще дава същия резултат.

GET e методът на заявка по подразбиране. При него данните се изпращат посредством заглавната част на заявката. Двойките name-value, съдържащи предаваните данни, се добавят към URL адреса като query string.

http://www.example.com:80/path/to/myfile.html?key1=value1\&key2=value2

&#x20;Пример за GET заявка:

<figure><img src="https://3165743208-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MUbVVR-jiMUx7iVRyw6%2Fuploads%2F2dIcZSf5OnRwCNwyL5De%2Fimage.png?alt=media&#x26;token=9efec6a7-d747-48ed-b176-58a5f23de93a" alt=""><figcaption></figcaption></figure>

Други характеристики на GET заявките са:

·        Остават в историята на браузъра;

·        Могат да се добавят в „отбелязани“ (bookmarked);

·        Могат да се кешират;

·        Имат ограничения за дължината на предаваните параметри;

·        Никога не трябва да се използват при работа с чувствителни данни;

·        Трябва да се използват само за извличане на данни.

### &#x20;POST

Методът POST изпраща обект на посочения ресурс, често причинявайки промяна в състоянието или странични ефекти на сървъра.

HTTP методът POST изпраща данни към сървъра. Типът на тялото на заявката се определя от хедъра Content-Type. Разликата между PUT и POST е, че PUT е идемпотентен: извикването му веднъж или няколко пъти последователно има същия ефект, докато последователните идентични POST могат да имат допълнителни ефекти, като например създаване на поръчка многократно. POST заявката обикновено се изпраща чрез HTML форма и води до промяна на сървъра. В този случай типът съдържанието се избира чрез поставяне на подходящатата стойност на атрибута enctype на елемента \<form> или атрибута formenctype на елементите \<input> или \<button>:

·        application/x-www-form-urlencoded: ключовете и стойностите са кодирани в двойки ключ-стойност, разделени с '&', с '=' между ключ и стойност. Небуквено-цифровите знаци и в ключовете, и в стойностите са процентно кодирани: това е причината този тип да не е подходящ за използване с двоични данни (вместо това използвайте multipart/form-data)

·        multipart/form-data: всяка стойност се изпраща като блок от данни, с дефиниран от потребителския агент разделител, разделящ всяка част.&#x20;

·        text/plain

При този метод двойките име-стойност, съдържащи предаваните данни, се изпращат посредством тялото на заявката.



<figure><img src="https://3165743208-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MUbVVR-jiMUx7iVRyw6%2Fuploads%2Ffs0Td3s6Yz484TwwZufT%2Fimage.png?alt=media&#x26;token=aba453bc-7770-459b-838e-770e0ae55824" alt=""><figcaption></figcaption></figure>

Други характеристики на POST заявките са:

·        Не могат да бъдат отметнати (bookmarked);

·        Нямат ограничения за дължина на данните;

·        Не се кешират;

·        Не се запазват в историята на браузъра

### PUT

Методът за заявка PUT създава нов ресурс или замества целевия ресурс с пренасяните от заявката данни. Разликата между PUT и POST е, че PUT е идемпотентен: извикването му веднъж или няколко пъти последователно има същия ефект, докато последователните идентични POST заявки могат да имат допълнителни ефекти, подобни на пускането на поръчка няколко пъти.

### DELETE

Методът DELETE се използва за изтриване на посочения ресурс.

### PATCH

Методът PATCH прилага частични модификации към ресурс. Заявка за PATCH се счита за набор от инструкции как да се модифицира ресурс, за разлика от PUT, който пълно представя ресурса.

PATCH не е непременно идемпотентен, въпреки че може да бъде. За разлика от PUT, който винаги е идемпотентен. Думата "идемпотентен" означава, че произволен брой повтарящи се идентични заявки ще оставят ресурса в същото състояние. Например, ако автоматично увеличаващо се поле за брояч е неразделна част от ресурса, тогава PUT естествено ще го презапише (тъй като презаписва всичко), но не е задължително да е така за PATCH. PATCH (като POST) може да има странични ефекти върху други ресурси. &#x20;

### HEAD

Методът HEAD иска отговор, идентичен на GET заявка, но без тялото на отговора.

HEAD изисква хедърите, които биха били върнати, ако URL адресът на заявката HEAD е поискан с метода GET. Например, ако URL може да доведе до изтегляне с голям обем, заявка HEAD може да прочете заглавката си Content-Length, за да провери размера на файла, без действително да го изтегли.

### CONNECT

Методът CONNECT установява тунел към сървъра, идентифициран от целевия ресурс.

CONNECT стартира двупосочна комуникация с искания ресурс. Може да се използва например за достъп до уебсайтове, които използват SSL (HTTPS). Клиентът иска от HTTP прокси сървър да тунелира TCP връзката до желаната дестинация. След това сървърът продължава да осъществява връзката от името на клиента. След като връзката бъде установена от сървъра, прокси сървърът продължава да проксира TCP потока към и от клиента.

### OPTIONS

Методът OPTIONS описва комуникационните опции за целевия ресурс.

Изисква разрешени опции за комуникация за даден URL или сървър. Клиентът може да посочи URL адрес с този метод или астерикс (\*), за да посочи целия сървър.

### TRACE

Методът TRACE извършва тест за обратна връзка на съобщението по пътя до целевия ресурс, осигурявайки полезен механизъм за отстраняване на грешки. &#x20;

###
