Как сделать https запрос


Автор: Евгений Рыжков Дата публикации: 18.10.2010

В предыдущей статье рассмотрели схемы обмена данными между браузером и сервером с помощью HTTP протокола и его запросов. Теперь познакомимся ближе с самим HTTP запросом.

Структура HTTP запроса

Каждое HTTP-сообщение состоит из трёх частей, которые передаются в указанном порядке:

  1. строка запроса — указан метод запроса (HTTP-метод), URI, версия протокола;
  2. заголовки — характеризуют тело сообщения, параметры передачи и прочие сведения;
  3. тело сообщения — данные сообщения.

Заголовки и тело сообщения могут отсутствовать, но стартовая строка является обязательным элементом. Например, строка запроса может выглядеть так:

GET http://www.xiper.net/ HTTP/1.1

Остановимся более подробно на методах запроса.

Методы HTTP

Метод указывает какая операция будет производится над ресурсом, представляет собой короткое английское слово, записанное заглавными буквами. Название метода чувствительно к регистру. В спецификации HTTP 1.1 определены следующие методы: OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, LINK, UNLINK. Чтобы не перегружать мозг избыточной информацией рассмотрим используемые чаще всего.

Метод GET

GET — используется для запроса содержимого указанного ресурса. Это с его помощью браузер получает HTML код конкретной страницы и все ее объекты (изображения, CSS и т.п). Тело такого запроса является пустым. Ответ может кэшироваться. GET запрос может передать параметры на сервер для уточнения запрашиваемых данных. Параметры запроса содержаться в адресе запроса, отделяются от URI знаком «?», пары параметр-значение разделяются символом «&». Подобный адрес запроса может выглядеть так:

http://www.domain-name.com?param1=value1&param2=value2

Кроме обычных GET запросов, есть еще условные и частичные.

Условный GET

Условный GET запрос (conditional GET) предназначен для уменьшения ненужной загрузки сети, и позволяет обновлять кэшированные объекты без пересылки данных, уже сохраненных клиентом. Условный GET содержит в своем заголовке определенные условия и данные получает от сервера, только если ответ удовлетворяет запрашиваемым условиям. Спецификацией HTTP 1.1 определены условия: If-Modified-Since, If-Match, If-None-Match, If-Range. Наиболее часто ныне используется If-Modified-Since, которым задается дата и время последнего изменения объекта. При последующем обращении к данному ресурсу, браузер проверит значение этого заголовка, если он не изменился, объект возьмется из кэша клиента.

Частичный GET

Частичный GET запрос (partial GET) предназначен для уменьшения ненужной загрузки сети. Позволяет собирать объект из частей без передачи данных уже имеющихся на стороне клиента и потому запрашивает передачу только части объекта. Используется заголовок Range.

Метод POST

POST предназначен для передачи данных на сервер. Тело такого запроса обычно содержит данные. Сообщение ответа сервера на выполнение метода POST не кэшируется. Этот метод второй по популярности использования, в основном его применяют в веб формах для получения каких-то данных от пользователей ресурса (формы входа, регистрации, отправка сообщений и т.п.).

Заметка

HTTP запросы можно разделить на безопасные (когда пользователь просто запрашивает данные и не может повлиять на работу сервера) и небезопасные (когда пользователь отправляет серверу определенные данные и потенциально может повлиять на его работу).

URI и версия протокола

URI — это последовательность символов (строка), идентифицирующая абстрактный или физический ресурс.

Версия протокола служит для указания, с какой версией протокола способен работать клиент/сервер и выглядит в виде HTTP/[версия]. Сейчас большинство поддерживают версию 1.1.

Каждый запрос имеет как как сделать https запрос минимум свой заголовок, который сообщить серверу информацию о своей конфигурации и данные о форматах документов, которые он может принимать. Заголовок представлен в текстовом виде. Например:

GET / HTTP/1.1 Host: www.google.com.ua User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2) Gecko/20100115 Firefox/3.6 GTB7.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Language: ru,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,;q=0.7 Keep-Alive: 115 Connection: keep-alive Cookie: PREF=ID=2578ccacb1ecf2aa:U=3a0a80ae418769c4:TM=1264579766:LM=1284111039:DV=sTIUytipGDoC:S=N0XC7wB0v7c6CCnH;

Такой заголовок имеет вес равный 956b.

Каждый ответ состоит из трех частей: строка состояния (содержит три поля: версию HTTP, код состояния и описание), заголовок ответа (информация о сервере и передаваемых данных) и сами данные. Первые две части представлены тоже в текстовом виде и выглядит это примерно так:

Request URL:http://ksayri.info/ Request сделать Method:GET Status Code:200 OK Accept-Ranges:bytes Connection:close Content-Encoding:gzip Content-Length:2553 Content-Type:text/html Date:Fri, 08 Oct 2010 08:35:53 GMT ETag:"9cb33-1638-490d5608b0540" Last-Modified:Wed, 22 Sep 2010 09:00:29 GMT Server:Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny8 with Suhosin-Patch Vary:Accept-Encoding

Только первые две части в особо тяжелых случаях могут весить 0.5 килобайт.

Это все к тому, что твой дополнительный однопиксельный gif на веб странице весом всего лишь 43 байта может вылиться в 130 с лишним мегабайт трафика при всего лишь 100 000 посетителях. Это еще одна причина для чего лучше сокращать число отдельных запросов к серверу.

Заметка

Вес передаваемых данных не влияет на размер заголовка.

Установка HTTP заголовков

Добраться до этих заголовков можно только с помощью настроек сервера и/или серверными скриптами.

При первом запросе браузером объекта (HTML страницы, картинки или любого другого) сервер присылает ответ, содержащий HTTP заголовки. Клиент их сохраняет вместе с адресом запроса. При повтором обращении по этому адресу браузер уже будет снабжен необходимыми заголовками.

Тело HTTP заголовка

Пока не нашел информации по этой части запроса, которая была бы полезной HTML кодеру, поэтому в этой статье рассматривать ее не буду.

По теме

Материалы


Источник: http://xiper.net/learn/also-need-to-know/how-does-a-browser-HTTP-request



Рекомендуем посмотреть ещё:


Закрыть ... [X]

Как правильно сделать https запрос? Зарядить аккумулятор для автомобиля в домашних условиях


Как сделать https запрос Как сделать https запрос Как сделать https запрос Как сделать https запрос Как сделать https запрос Как сделать https запрос