Донецкий техникум промышленной автоматики

ІМСС УрО РАН

  1. 2. HTTP запит
  2. 2.2. рядок статусу
  3. 2.3. метод запиту
  4. 2.3.1. GET
  5. 2.3.2. HEAD
  6. 2.3.3. POST
  7. 2.3.4. PUT
  8. 2.3.5. DELETE
  9. 2.3.6. LINK
  10. 2.3.7. UNLINK
  11. 2.4. Поля заголовка запиту
  12. 3. HTTP відповідь
  13. 3.2. рядок Статус
  14. 3.3. Статус-Код і пояснення до нього
  15. 3.4. Поля заголовка відповіді
Подробиці Опубліковано: 22 квітня 2016 Переглядів: 1466

HyperText Transfer Protocol (HTTP) - це протокол прикладного рівня, який застосовується в розподілених інформаційних системах гіпермедіа. HTTP використовується проектом World Wide Web з 1990 року.

HTTP / 1.0 надає відкриту множину методів, які можуть бути використані для вказівки цілей запиту. Вони побудовані на дисципліні посилань, де для вказівки ресурсу, до якого повинен бути застосований даний метод, використовується Універсальний Ідентифікатор Ресурсів (Universal Resource Identifier - URI), у вигляді місцезнаходження (URL) або імені (URN). Формат повідомлень подібний з форматом Internet Mail або Multipurpose Internet Mail Extensions (MIME-Багатоцільовий Розширення Пошти Internet).

HTTP / 1.0 використовується також для комунікацій між різними призначеними для користувача переглядачами і шлюзами, що дають гіпермедіа доступ до існуючих Internet протоколів, таким як SMTP, NNTP, FTP, Gopher і WAIS. HTTP / 1.0 розроблений, щоб дозволяти таким шлюзів через proxy сервери, без будь-якої втрати передавати дані за допомогою згаданих протоколів більш ранніх версій.

1. Загальна структура

HTTP ґрунтується на парадигмі запитів / відповідей. Запитуюча програма (зазвичай вона називається клієнт) встановлює зв'язок з обслуговуючою програмою-одержувачем (зазвичай називається сервер) і надсилає запит серверу в наступній формі: метод запиту, URI, версія протоколу, за якою слідує MIME-подібне повідомлення, що містить керуючу інформацію запиту, інформацію про клієнта і, можливо, тіло повідомлення. Сервер відповідає повідомленням, що містить рядок статусу (включаючи версію протоколу і код статусу - успіх або помилка), за якою слідує MIME-подібне повідомлення, що включає в себе інформацію про сервер, метаінформацію про зміст відповіді, і, ймовірно, саме тіло відповіді. Слід зазначити, що одна програма може бути одночасно і клієнтом і сервером. Використання цих термінів у даному тексті відноситься тільки до ролі, виконуваної програмою протягом даного конкретного сеансу зв'язку, а не до загальних функцій програми.

В Internet комунікації звичайно ґрунтуються на TCP / IP протоколах. Для WWW номер порту за замовчуванням - TCP 80, але також можуть бути використані і інші номери портів - це не виключає можливості використовувати HTTP як протокол верхнього рівня.

Для більшості додатків сеанс зв'язку відкривається клієнтом для кожного запиту і закривається сервером після закінчення відповіді на запит. Проте, це не є особливістю протоколу. І клієнт, і сервер повинні мати можливість закривати сеанс зв'язку, наприклад, в результаті якого-небудь дії користувача. У будь-якому випадку, розрив зв'язку, ініційований будь-якою стороною, перериває поточний запит, незалежно від його статусу.

2. HTTP запит

2.1. загальні поняття

Запит - це повідомлення, що посилається клієнтом серверу.
Перший рядок цього повідомлення містить у собі метод, який повинен бути застосований до запитуваного ресурсу, ідентифікатор ресурсу і використовувану версію протоколу. Для сумісності з протоколом HTTP / 0.9, існує два формати HTTP запиту:

Запит = Простий-Запит | Повний-Запит Простий-Запит = "GET" SP Запитуваний-URI CRLF Повний-Запит = Рядок-Статус * (Загальний-Заголовок | Заголовок-Запиту | Заголовок-Змісту) CRLF [Зміст-Запиту]

Якщо HTTP / 1.0 сервер отримує Простий-Запит, він повинен відповідати Простою-Відповіддю HTTP / 0.9. HTTP / 1.0 клієнт, здатний обробляти Повну-Відповідь, ніколи не повинен посилати Простий-Запит.

2.2. рядок статусу

Рядок Статус починається з рядка з назвою методу, за яким слід URI-запиту і версія протоколу. Рядок Статус закінчується символами CRLF. Елементи рядка розділяються пробілами (SP). У Строке Статус не допускаються символи LF і CR, за винятком кінцевої послідовності CRLF.

Рядок-Статус = Метод SP URI-Запиту SP Версія-HTTP CRLF

Слід зазначити, що відмінність Рядка Статус Повного-Запиту від Рядка Статус Простого- Запиту полягає в присутності поля Версія-HTTP.

2.3. метод запиту

В поле Метод вказується метод, який повинен бути застосований до ресурсу, ідентифікованому URI-запиту. Назви методів чутливі до регістру. Існуючий список методів може бути розширено.

Метод = " GET "|" HEAD "|" PUT "|" POST "|" DELETE "|" LINK "|" UNLINK "| Додатковий-метод

Список методів, що допускаються окремим ресурсом, може бути вказаний в полі Заголовок-Зміст "Балів". Проте, клієнт завжди оповіщається сервером через код статусу відповіді, чи допускається застосування даного методу для зазначеного ресурсу, так як допустимість застосування різних методів може динамічно змінюватися. Якщо даний метод відомий серверу, але не допускається для зазначеного ресурсу, сервер повинен повернути код статусу "405 Method Not Allowed", і код статусу "501 Not Implemented", якщо метод не відомий або не підтримує даними сервером. Загальні методи HTTP / 1.0 описуються нижче.

2.3.1. GET

Метод GET служить для отримання будь-якої інформації, ідентифікованої URI-Запиту. Якщо URI- Запиту посилається на процес, що видає дані, як відповідь будуть виступати дані, згенеровані даним процесом, а не код самого процесу (якщо тільки це не є вихідними даними процесу).

Метод GET змінюється на "умовний GET", якщо повідомлення запиту містить у собі поле заголовка "If-Modified-Since". У відповідь на умовний GET, тіло запитуваного ресурсу передається тільки, якщо він змінювався після дати, зазначеної в заголовку "If-Modified-Since". Алгоритм визначення цього містить у собі наступні випадки:

Використання методу умовний GET спрямовано на розвантаження мережі, так як він дозволяє не передавати по мережі надлишкову інформацію.

2.3.2. HEAD

Метод HEAD аналогічний методу GET, за винятком того, що у відповіді сервер не повертає тіло-Відповіді. Метаінформація, що міститься в HTTP заголовках відповіді на запит HEAD, повинна бути ідентична інформації HTTP заголовків відповіді на запит GET. Даний метод може використовуватися для отримання метаінформації про ресурс без передачі по мережі самого ресурсу. Метод "Умовний HEAD", аналогічний умовному GET, не визначений.

2.3.3. POST

Метод POST використовується для запиту сервера, щоб той прийняв інформацію, включену в запит, як субордінантную для ресурсу, зазначеного в Строке Статус в поле URI-Запиту. Метод POST був розроблений, щоб була можливість використовувати один загальний метод для наступних функцій:

Реальна функція, виконувана методом POST, визначається сервером і звичайно залежить від URI- Запиту. Інформація, що додається розглядається як субордінатная вказаною URI в тому ж сенсі, як файл субордінатен каталогу, в якому він знаходиться, нова стаття Підрядні групі новин, в яку вона додається, запис Підрядні базі даних.

Клієнт може запропонувати URI для ідентифікації нового ресурсу, включивши в запит заголовок "URI". Проте, сервер повинен розглядати цей URI тільки як пораду і може зберегти тіло запиту під іншим URI або взагалі без нього.

Якщо в результаті обробки запиту POST був створений новий ресурс, відповідь повинна мати код статусу, рівний "201 Created", і містити URI нового ресурсу.

2.3.4. PUT

Метод PUT запитує сервер про збереження Тіла-Запиту під URI, рівним URI-Запиту. Якщо URI-Запиту посилається на вже існуючий ресурс, Тіло-Запиту повинне розглядатися як модифікована версія даного ресурсу. Якщо ресурс, на який посилається URI-Запиту не існує, і даний URI може розглядатися як опис для нового ресурсу, сервер може створити ресурс із даним URI. Якщо був створений новий ресурс, сервер повинен інформувати, що направив запит, через відповідь з кодом статусу "201 Created". Якщо існуючий ресурс був модифікований, повинен бути посланий відповідь "200 OK", для інформування клієнта про успішне завершення операції. Якщо ресурс із зазначеним URI не може бути створений або модифікований, має бути надіслане відповідне повідомлення про помилку.

Фундаментальна відмінність між методами POST і PUT полягає в різному значенні поля URI-Запиту. Для методу POST даний URI вказує ресурс, який буде керувати інформацією, що міститься в тілі запиту, як деяким придатком. Ресурс може бути обробляють дані процесом, шлюзом в який-небудь інший протокол, або окремим ресурсом, що допускає анотації. На противагу цьому, URI для запиту PUT ідентифікує інформацію, що міститься в Зміст-Запиту. Запит, PUT точно знає який URI він збирається використовувати, і одержувач запиту не повинен намагатися застосувати цей запит до якогось іншого ресурсу.

2.3.5. DELETE

Метод DELETE використовується для видалення ресурсів, ідентифікованих за допомогою URI-Запиту. Результати роботи даного методу на сервері можуть бути змінені за допомогою людського втручання (або яким-небудь іншим способом). В принципі, клієнт ніколи не може бути впевнений, що операція видалення була виконана, навіть якщо код статусу, переданий сервером, інформує про успішне виконання дії. Проте, сервер не повинен інформувати про успіх доти, поки на момент відповіді він не буде збиратися стерти даний ресурс або перемістити його в деяку недосяжну область.

2.3.6. LINK

Метод LINK установлює взаємозв'язки між існуючим ресурсом, зазначеним у URI-Запиту, і іншими існуючими ресурсами. Відмінність методу LINK від інших методів, що допускають встановлення посилань між документами, полягає в тому, що метод LINK не дозволяє передавати в запиті Тіла-Запиту, і в тому, що в результаті роботи даного методу не створюються нові ресурси.

2.3.7. UNLINK

Метод UNLINK видаляє одну або більше довідкових взаємозв'язків для ресурсу, зазначеного в URI- Запиту. Ці взаємозв'язки можуть бути встановлені за допомогою методу LINK чи якого-небудь іншого методу, що підтримує заголовок "Link". Видалення посилання на ресурс не означає, що ресурс припиняє існування або стає недоступним для майбутніх посилань.

2.4. Поля заголовка запиту

Поля Заголовок-Запиту дозволяють клієнту передавати серверу додаткову інформацію про запит і про самого клієнта.

Заголовок-Запиту = Accept | Accept-Charset | Accept-Encoding | Accept-Language | Authorization | From | If-Modified-Since | Pragma | Referer | User-Agent | extension-header Крім того через механізм розширення можуть бути визначені додаткові заголовки; додатки, які їх не розпізнають, повинні трактувати ці заголовки, як Заголовок-Зміст.

Нижче будуть розглянуті деякі поля заголовка запиту.

From

У разі присутності поля From, воно повинно містити повну E-mail адресу користувача, що керує програмою-агентом, що здійснює запити. Ця електронна адреса має бути задана у форматі, визначеному в RFC 822. Формат даного поля наступний: From = "From" ":" специфікація адреси.

наприклад:

From: Ця електронна адреса захищена від спам-ботів. У вас повинен бути включений JavaScript для перегляду.

Дане поле може бути використане для функцій заходу в систему, а також для ідентифікації джерела некоректних або небажаних запитів. Воно не повинно використовуватися, як несекретна форма розмежування прав доступу. Інтерпретація цього поля полягає в тому, що обробляється запит виробляється від імені даного користувача, який приймає відповідальність за застосовуваний метод. Зокрема, агенти-роботи повинні використовувати цей заголовок для того, щоб можна було зв'язатися з тією людиною, яка відповідає за роботу робота, в разі виникнення проблем. Поштовий Internet адреса, вказується в цьому полі, не зобов'язаний відповідати адресою того хоста, з якого був посланий даний запит. По можливості, адреса повинна бути доступною Internet адресою незалежно від того, чи є він насправді Internet E-mail адресою або Internet E-mail представленням адреси інших поштових систем.

Зауваження: Клієнт не повинен використовувати поле заголовка From без дозволу користувача, так як це може увійти в конфлікт з його приватними інтересами або з місцевої, використовуваної їм, системою безпеки. Настійно рекомендується надання користувачу можливості заборонити, дозволити або модифікувати це поле в будь-який момент перед запитом.

If-Modified-Since

Поле заголовка If-Modified-Since використовується з методом GET для того, щоб зробити його умовним: якщо запитуваний ресурс не змінювався в часі, зазначеного в цьому полі, копія цього ресурсу не буде повернута сервером; замість цього, буде повернута відповідь "304 Not Modified" без Тіла-Відповіді.

If-Modified-Since = "If-Modified-Since" ":" HTTP-дата

Приклад використання заголовка:

If-Modified-Since: Sat, 29 Oct 1 994 19:43:31 GMT

Метою цієї особливості є надання можливості ефективного відновлення інформації локальних кешей з мінімумом переданої інформації. Той же результат може бути досягнутий застосуванням методу HEAD з наступним використанням GET, якщо сервер вказав, що вміст документа змінився.

User-Agent

Поле заголовка User-Agent містить інформацію про призначеному для користувача агента, що послав запит. Дане поле використовується для статистики, простежування помилок протоколу, і автоматичного розпізнавання користувальницьких агентів. Хоча це не обов'язково, призначені для користувача агенти повинні завжди включати це поле у ​​свої запити. Поле може містити кілька рядків, що представляють собою назву програмного продукту, необов'язкову косу рису з указівкою версії продукту, а також інші програмні продукти, що становлять важливу частину користувальницького агента. За угодою, продукти вказуються в списку в порядку убування їх значущості для ідентифікації додатка.

User-Agent = "User-Agent" ":" 1 * (продукт) продукт = рядок [ "/" версія-продукту] версія-продукту = рядок

приклад:

User-Agent: CERN-LineMode / 2.15 libwww / 2.17b3

Рядок, що описує назву продукту, повинна бути короткою і давати інформацію по суті - використання даного заголовка для рекламування будь-якої іншої, яка не належить до справи, інформації не допускається і розглядається, як не відповідає протоколу. Хоча в поле версії продукту може бути присутнім будь-який рядок, даний рядок повинна використовуватися тільки для вказівки версії продукту. Поле User-Agent може включати в себе додаткову інформацію в коментарях, які не є частиною його значення.

3. HTTP відповідь

3.1. структура відповіді

Після отримання та інтерпретації запиту, сервер посилає відповідь у відповідності з наступною формою:

Відповідь = Проста-Відповідь | Повна-Відповідь Проста-Відповідь = [Зміст-Відповіді] Повна-Відповідь = Рядок-Статус * (Загальний-Заголовок | Заголовок-Відповіді | Заголовок-Змісту) CRLF [Зміст-Відповіді]

Простий-Відповідь повинна посилатися тільки у відповідь на HTTP / 0.9 Простий-Запит, або в тому випадку, якщо сервер підтримує тільки обмежений HTTP / 0.9 протокол. Якщо клієнт посилає HTTP / 1.0 Повний-Запит і одержує відповідь, що не починається з Рядок-Статус, він повинен припускати, що відповідь сервера являє собою Простий-Відповідь, і обробляти його відповідно до цього. Слід зауважити, що Проста-Відповідь складається тільки з запитуваної інформації (без заголовків) і потік даних припиняється в той момент, коли сервер закриває сеанс зв'язку.

3.2. рядок Статус

Перший рядок Повного-Запиту є Рядок-Статус, що складається з версії протоколу, за якою слідує цифровий код статусу і асоційоване з ним текстова пропозиція. Всі елементи Рядок-Статус розділені пробілами. Чи не дозволені символи CR і LF, за винятком завершальної послідовності CRLF.

Рядок-Статус = Версія-HTTP SP Статус-Код SP Фраза-Пояснення.

Так як Рядок-Статус завжди починається з версії протоколу "HTTP /" 1 * ЦИФРА "." 1 * ЦИФРА (наприклад HTTP / 1.0), існування цього вираження розглядається як основне для визначення того, чи є відповідь Простою-Відповіддю, або Повним-Відповіддю. Хоча формат Простого-Відповіді не виключає появи подібного рядка (що призвело б до неправильної інтерпретації повідомлення відповіді і прийняттю його за Повну-Відповідь), ймовірність такого появи близька до нуля.

3.3. Статус-Код і пояснення до нього

Елемент Статус-Код являє собою 3-х цифровий цілий код, що ідентифікує результат спроби інтерпретації і задоволення запиту. Фраза-Пояснення, наступна за ним, призначена для короткого текстового опису Статус-Коду. Статус-Код націлений на те, щоб його використовувала машина, а Фраза-Пояснення призначена для людини. Клієнт не зобов'язаний досліджувати і виводити на екран Фразу-Пояснення.

Перша цифра Статус-Коду призначена для визначення класу відповіді. Останні дві цифри не виконують ніякої категоризаційної ролі. Існує 5 значень для першої цифри:

  1. 1xx: Інформаційний - Чи не вікорістовується, но зарезервованій для использование в Майбутнього
  2. 2xх: Успіх - Запитів БУВ Цілком отриманий, зрозумілій, и чинний до ОБРОБКИ.
  3. 3xx: Перенаправлення - Клієнту варто почати подальші дії для успішного виконання запиту. Необхідна додаткова дія іноді може бути виконано клієнтом без взаємодії з користувачем, але настійно рекомендується, щоб це мало місце лише в тих випадках, коли метод, що використовується в запиті байдужий (GET або HEAD).
  4. 4xx: Помилка клієнта - Запит, що містить неправильні синтаксичні конструкції, не може бути успішно виконаний. Клас 4xx призначений для опису тих випадків, коли помилка була допущена з боку клієнта. Якщо клієнт ще не завершив запит, коли він отримав відповідь з Статус-Кодом- 4xx, він повинен негайно припинити передачу даних серверу. Даний тип Статус-Кодів можна застосувати для будь-яких методів, що вживаються в запиті.
  5. 5xx: Помилка Сервера - Сервер не зміг дати відповідь на коректно поставлений запит. У цих випадках
  6. сервер або знає, що він припустився помилки, або не здатний обробити запит. За винятком відповідей на запити HEAD, сервер посилає опис помилкової ситуації і те, чи є цей стан тимчасовим або постійним, в Зміст-Відповіді. Даний тип Статус-Кодів можна застосувати для будь-яких методів, що вживаються в запиті.

Окремі значення Статус-Кодів і відповідні їм Фрази-Пояснення приведені нижче. Дані Фрази-Пояснення тільки рекомендуються - вони можуть бути заміщені будь-якими іншими фразами, що зберігають зміст і допускаються протоколом.

Статус-Код = "200"; OK | "201"; Created | "202"; Accepted | "203"; Provisional Information | "204"; No Content | "300"; Multiple Choices | "301"; Moved Permanently | "302"; Moved Temporarily | "303"; Method | "304"; Not Modified | "400"; Bad Request | "401"; Unauthorized | "402"; Payment Required | "403"; Forbidden | "404"; Not Found | "405"; Method Not Allowed | "406"; None Acceptable | "407"; Proxy Authentication Required | "408"; Request Timeout | "409"; Conflict | "410"; Gone | "500"; Internal Server Error | "501"; Not Implemented | "502"; Bad Gateway | "503"; Service Unavailable | "504"; Gateway Timeout | Код-Рассшіренія Код-Розширення = 3ЦІФРА Фраза-Пояснення = рядок * (SP рядок)

Від HTTP додатків не потрібно розуміння всіх Статус-Кодів, хоча таке розуміння, очевидно, бажано. Проте, від додатків вимагається здатність розпізнавання класів Статус-Кодів (ідентифікуються першою цифрою) і відношення до всіх Статус-кодами статусу відповіді, як якби вони були еквівалентні Статус-Коду x00.

3.4. Поля заголовка відповіді

Поля заголовка відповіді дозволяють серверу передати додаткову інформацію про відповідь, яка не може бути внесена в Рядок-Статус. Ці поля заголовків не призначені для передачі інформації про зміст відповіді, переданого у відповідь на запит, але там може бути інформація власне про сервер.

Заголовок-Відповіді = Public | Retry-After | Server | WWW-Authenticate | extension-header

Хоча додаткові поля заголовка відповіді можуть бути реалізовані через механізм розширення, додатки, що не розпізнають ці поля, повинні обробляти їх як поля Заголовок-Зміст. Повний опис цих полів можна отримати в специфікації протоколу HTTP в CERN.

4. Зміст запиту і відповіді

Як видно на малюнку всі транзакції між клієнтом і сервером відбуваються на верхньому рівні мережевий ієрархії. Всі HTTP-транзакції мають один загальний формат. Кожен запит клієнта і відповідь сервера складається з трьох частин: рядки запиту (відповіді), розділу заголовка і тіла.

Клієнт ініціює транзакцію наступним чином:

  1. Клієнт встановлює зв'язок з сервером на номер телефону порту (за замовчуванням - 80). Потім надсилається запит документа із зазначенням HTTP комманди (званої методом), адреси документа і номера версії HTTP. Наприклад: GET /index.html HTTP / 1.0
  2. Клієнт посилає необов'язкову інформацію заголовка, щоб повідомити серверу інформацію про свою конфігурації і дані про форматах документів, які він може приймати. Вся інформація заголовка вказується за рядком і кожен рядок містить пару ім'я-значення. Тема завершується символом нового рядка. Наприклад: User-Agent: Mozilla / 2.02Gold (WinNT; I)
    Accept: image / gif, image / jpeg, * / *
  3. Надіславши запит і заголовки, клієнт може відправити додаткові дані (тіло запиту). Ці дані використовуються, наприклад, CGI-програмами, які застосовують метод POST.

Сервер відповідає на запит клієнта наступним чином:

  1. Перша частина відповіді - рядок стану, що містить версію протоколу HTTP, код стану та опис, яке представляє собою просто зрозумілий для людини текст, що пояснює код стану. Наприклад: HTTP / 1.0 200 OK
  2. Після рядка стану сервер передає клієнту інформацію заголовка відповіді, що містить дані про самому сервері і викликаній документі. Завершує заголовок порожній рядок. Наприклад: Date: Fri, 20 Sep 1996 8:17:58 GMT
    Server: NCSA / 1.5.2
    Last-modified: Mon, 17 Jun 1 996 21:53:08 GMT
    Content-type: text / html
    Content-length: 2482
  3. Якщо запит клієнта успішний, то сервер посилає витребувані дані. Це може бути копія файлу або документ сформований "на льоту". Якщо запит клієнта задовольнити не можна, то сервер передає додаткові дані у вигляді зручного для людини роз'яснення причин, за якими сервер не зміг виконати запит.

У HTTP 1.0 після передачі сервером затребуваних даних слід роз'єднання з клієнтом і транзакція завершується, якщо не був переданий заголовок Connection: Keep Alive. У HTTP 1.1 сервер за замовчуванням не розриває з'єднання і клієнт може посилати інші запити. Це дозволяє заощадити час і витрати клієнта, якому не доводиться заново з'єднуватися з тим же сервером. Таким чином, в HTTP 1.1 транзакція може циклічно повторюватися, поки клієнт або сервер не закриє з'єднання явно.

4.1. методи

Метод - це HTTP-комманда, з якої починається перший рядок запиту клієнта. Метод повідомляє серверу про мету запиту. Найчастіше використовуються методи GET, HEAD і POST (реєстр має значення).

GET Цим методом запитується інформація, розташована на сервері в зазначеному в запиті місці. Методом GET web браузери зазвичай отримують документи для візуалізації. Результатом такого запиту може бути, наприклад, файл, що лежить на сервері або ж сформований спеціально для цього запиту. Наприклад: GET / HTTP / 1.0
User-Agent: Simple Web client by Eugen Kuleshov
Accept: * / * HEAD Метод HEAD аналогічний методу GET, за винятком того, що сервер не посилає тіло відповіді, а лише заголовки про запрошенням файлі або ресурсі. Зазвичай цей метод використовується для отримання інформації про документ не отримуючи документ. Можна, наприклад, зажадати наступну інформацію:
  • час зміни документа;
  • розмір документа;
  • Тип документа;
  • тип сервера.

Слід зазначити, що більша частина посилається сервером інформації заголовка, не є обов'язковою і може представлятися не всіма web серверами. например:

HEAD / HTTP / 1.0
User-Agent: Simple Web client by Eugen Kuleshov
Accept: * / * POST Цей метод дозволяє посилати на сервер дані в запиті клієнта. Ці дані можуть бути використані сервером для динамічної генерації запитуваної документа, наприклад для передачі вхідних даних для:
  • мережевих служб (наприклад телеконференцій)
  • програм з інтерфейсом типу "командний рядок"
  • виконання операцій в базах даних

например:

POST / HTTP / 1.0
User-Agent: Simple Web client by Eugen Kuleshov
Accept: * / *
Content-type: application / x-www-form-urlencoded
Content-length: 16

test = 20 & test2 = 22

Зверніть увагу на атрибути Content-type і Content-length вони використовуються для того, щоб вказати серверу на тип кодування тіла запиту і дати інформацію про довжину тіла. Детальніше ви можете почитати у відповідному RFC (HTTP 1.0 - rfc1945 або HTTP 1.1 - rfc2068 ).