Всички данни в рамките на уеб технологията се предават чрез протокола HTTP(Хипер текст Протокол за предаване). Изключение е обменът чрез програмиране на Java или обмен от Plugin приложения. Като се има предвид действителният обем трафик, който се предава като част от уеб обмен през HTTP, ние ще разгледаме само този протокол. При това ще разгледаме въпроси като:
Обща структура на съобщението
HTTP е протокол на приложния слой. Протоколът е фокусиран върху модела за обмен клиент-сървър. Обменът се извършва в части от данни, наречени HTTP съобщения. Съобщенията, изпратени от клиента до сървъра, се наричат заявки, а съобщенията, изпратени от сървъра до клиента, се наричат отговори. Едно съобщение може да се състои от две части: заглавка и тяло. Основният текст е отделен от заглавието с празен ред.
Заглавката съдържа служебна информация, необходима за обработка на тялото на съобщението или контрол на обмена. Заглавката се състои от директиви за заглавка, които обикновено се записват на нов ред.
Основният текст на съобщението не е задължителен, но заглавката на съобщението е. Може да съдържа текст, графики, аудио или видео информация.
По-долу е HTTP заявката:
GET / HTTP/1.0 Приемам: изображение/jpeg [празен ред]
и отговор:
HTTP/1.0 200 OK Дата: петък, 24 юли 1998 г. 21:30:51 GMT Сървър: Apache/1.2.5 Content-type: text/html Content-length: 21345 [празен ред]контекст на страницата
Текстът "празен ред" просто показва наличието на празен ред, който разделя заглавката на HTTP съобщение от тялото му.
Сървърът, получавайки заявка от клиент, преобразува част от информацията за заглавката на HTTP заявката в променливи на средата, които са достъпни за анализ чрез CGI скрипт. Ако заявката има тяло, тогава тялото е достъпно за скрипта чрез стандартния входен поток.
Методи за достъп
Най-важната директива на HTTP заявка е методът за достъп. Посочва се като първата дума в първия ред на заявката. В нашия пример това е GET. Има четири основни метода за достъп:
В допълнение към тези четири метода има около пет допълнителни метода за достъп, но те рядко се прилагат на практика.
GET метод
Методът GET се използва от клиента, когато прави заявка към сървъра по подразбиране. С този метод клиентът съобщава адреса на ресурса (URL), който иска да получи, версията на HTTP протокола, типовете MIME документи, които поддържа, и версията и името на клиентския софтуер. Всички тези параметри са посочени в заглавката на HTTP заявката. Тялото не се изпраща в заявката.
В отговор сървърът отчита версията на HTTP протокола, кода за връщане, типа на съдържанието на тялото на съобщението, размера на тялото на съобщението и редица други незадължителни директиви за HTTP заглавка. Самият ресурс, обикновено HTML страница, се изпраща в тялото на отговора.
Метод HEAD
Методът HEAD се използва за минимизиране на обмена при работа по HTTP протокола. Подобен е на метода GET, с изключение на това, че тялото на съобщението не се изпраща в отговора. Този метод се използва за проверка на времето на последната модификация на ресурс, за проверка на датата на изтичане на кеширани ресурси, когато се използват програми за сканиране на ресурси в World Wide Web. Накратко, методът HEAD е предназначен да минимизира количеството информация, предавана по мрежата като част от HTTP обмен.
POST метод
Методът POST е алтернатива на метода GET. Когато обменяте данни с помощта на метода POST, заявката на клиента съдържа тяло на HTTP съобщение. Това тяло може да се формира от данни, въведени в HTML формуляр, или от прикачен външен файл. Отговорът обикновено съдържа както заглавката, така и тялото на HTTP съобщението. За да започнете обмен, като използвате метода POST в атрибута методконтейнер форматрябва да се посочи стойността "post".
Метод PUT
Методът PUT се използва за публикуване на HTML страници в директорията на HTTP сървъра. Когато предава данни от клиент към сървър, съобщението съдържа и заглавка на съобщението, която указва URL адреса на този ресурс, и body - съдържанието на хоствания ресурс.
Отговорът обикновено не изпраща тялото на ресурса, а по-скоро съдържа код за връщане в заглавката на съобщението, който определя дали разпределението на ресурса е било успешно или неуспешно.
Оптимизация на обмена
HTTP протоколът първоначално е проектиран да бъде протокол без връзка. Това означава, че след като сървърът е приел заявка от клиента и е отговорил на нея, връзката между клиента и сървъра се губи. За нов обмен на данни трябва да се установи нова връзка. Този подход има както предимства, така и недостатъци.
Предимствата включват възможността за едновременно обслужване на голям брой кратки запитвания. Дори на популярни сървъриброят на отворените връзки не може да надвишава стотици при обслужване на около милион заявки на ден. В този случай един клиент може да отвори до 40 връзки едновременно, които от гледна точка на сървъра са равни. С високоскоростните комуникационни линии това дава възможност да се постигне кратко време за отговор на клиентска заявка за цялата страница (текст, графика и др.).
Недостатъците на тази схема за обмен включват: необходимостта от установяване на връзка за всеки обмен и невъзможността да се поддържа сесия за работа с информационен ресурс. При инициализиране на връзка чрез транспорт TCP протоколи прекъсването на тази връзка изисква предаване на доста голямо количество служебна информация. Липсата на поддръжка на сесии в HTTP значително усложнява работата с ресурси като бази данни или ресурси, които изискват удостоверяване.
За оптимизиране на броя отворени TCP връзки HTTP протокол версии 1.0 и 1.1 осигуряват поддържащ режим. В този режим връзката се инициализира само веднъж и няколко HTTP обмена могат да се извършват последователно.
За да се приложи поддръжка на сесия, „бисквитки“ бяха добавени към директивите на HTTP заглавката. Те ви позволяват да симулирате поддръжка на връзка, когато работите по HTTP протокола.
Кодиране на GET и POST заявки.
Има два вида кодиране на HTTP заявка. Основен - urlencoded, известно още като стандартно URL кодиране. Интервалът е представен като %20, руските букви и повечето специални знаци са кодирани, английските букви и тирета са оставени както са.
Начинът, по който данните от формуляра трябва да бъдат кодирани при изпращане, е посочен в неговия HTML таг: