Почти всё, что вы видите в вашем браузере, передаётся на ваш компьютер через протокол HTTP. Например, когда вы открыли страницу этого урока, ваш браузер отправил множество HTTP-запросов (Request) и получил множество ответов (Response).

Заголовки HTTP (Header) являются важной составной частью этих HTTP-запросов и ответов, они передают информацию о браузере клиента, запрошенной странице, сервере и многом другом.

В данном уроке пойдет речь о том, как получить интересующую нас информацию из заголовков запроса (Request Headers) и установить определенные значения необходимым заголовкам ответа (Response Headers).

Самый простой способ получения информации о содержимом Request Headers, это выполнить запрос в опубликованном приложении и, в инструменте разработчика (F12) перейти во вкладку Networks. Выбрав отправленный запрос из списка, переключиться на вкладку Headers и найти раздел Request Headers.

1_f12

Блоки для работы с заголовками в AppMaster

В AppMaster, в дизайне БП бэкенда приложения, есть возможность получить информацию из заголовка, зная его имя. Для этого используется блок БП Get Request Headers.

2_getRequestHeaders

  • Name [string] - имя заголовка, значение которого требуется получить;
  • Value [string] - строковое значение параметра в заголовке.

Для того, чтобы добавить свой (кастомный) заголовок, можно использовать блок БП Set Response Header. Это требуется, если нужно вывести дополнительную информацию в заголовке ответа.

3_setResponseHeaders

  • Name [string] - имя заголовка;
  • Value [string] - строковое значение заголовка.

Примеры заголовков запроса-ответа

Заголовков запросов может быть огромное множество, но некоторые из них описаны ниже (информация взята из https://www.w3.org/Protocols/HTTP/HTRQ_Headers.html):

  • From - данное поле возвращает имя пользователя, отправившего запрос, в формате электронной почты. Интерпретация этого поля заключается в том, что запрос выполняется от имени указанного лица, которое принимает на себя ответственность за выполненный метод.
  • Accept - данное поле содержит разделенный точкой с запятой список схем представления (значения метаинформации Content-Type), которые будут приняты в ответе на этот запрос. Данный набор может варьироваться от запроса к запросу для одного и того же пользователя.
    • Пример:
      Accept: text/plain, text/html
      Accept: text/x-dvi; q=.8; mxb=100000; mxt=5.0, text/x-c
  • Accept-Encoding - аналогичен Accept, но перечисляет типы Content-Encoding, которые допустимы в ответе.
    • Пример:
      Accept-Encoding: x-compress; x-zip
  • Referer - необязательное поле заголовка позволяет клиенту указать в интересах сервера адрес ( URI ) документа (или элемента внутри документа), из которого был получен URI в запросе. Это позволяет серверу генерировать списки обратных ссылок на документы, для интереса, регистрации и т. д. А также позволяет отслеживать плохие ссылки. Если указан частичный URI, то он должен быть проанализирован относительно URI объекта запроса.
  • Authorization - содержит информацию об авторизации согласно указанному формату. Первое слово — спецификация используемой системы авторизации.
    • Пример:
      Authorization: Bearer BtHKEsVs5mNNtNf7UWoVwjJzFqLOzucA
  • Accept-Language - аналогичен Accept, но перечисляет значения языка, которые являются предпочтительными в ответе. Ответ на неизвестном языке будет обработан.
  • User-Agent - указывает программу, используемую клиентом (браузер в данном случае). Нужно для статистических целей и отслеживания нарушений протокола. Первым словом, разделенным пробелами, следует название программного продукта и (необязательно) через косую черту обозначение версии.
    • Пример:
      User-Agent: User-Agent:  LII-Cello/1.0  libwww/2.5

Некоторые из заголовков ответов:

  • Allowed - перечисляет набор запросов, которые запрашивающему пользователю разрешено делать для этого URL-адреса. Если эта строка заголовка пропущена, разрешенными методами по умолчанию являются «GET HEAD».
  • Public - т.с., что и Allowed, но перечисляет те запросы, которые может использовать любой. Если пропущено, по умолчанию используется только "GET".
  • Content-Length - подразумевает, что тело является двоичным и должно считываться непосредственно из канала связи, без разбора строк и т. д. Когда данные являются частью запроса, предотвращает экранирование и отмену экранирования завершающей последовательности.
  • Content-Encoding - указывает используемый механизм кодирования. В настоящее время используются только x-compress и x-gzip.
  • Content-Type - указывает тип документа.
  • Content-Length - когда контент будет передаваться браузеру, сервер может указать его размер (в байтах), используя этот header.
  • Last-Modified - указывает дату последнего изменения документа в формате GMT.
  • Location - используется для перенаправления.

Пример использования

Рассмотрим пример получения информации об IP пользователя и его Cookie токена с помощью заголовков.

Получить информацию об IP пользователя можно с помощью заголовка x-real-ip. Информацию о Cookie токене можно получить с помощью заголовка Cookie.

Следующий БП отвечает за получение информации о токене Cookie и IP адреса:

bp

Далее, создается эндпоинт для данного БП. 

endpoint

Дизайнер веб-интерфейса выглядит следующим образом:

ui

По нажатию на кнопку, идет обращение к созданному эндпоинту с целью вызвать созданный БП. Значения на выходе данного БП передаются в значения компонентов Label. Результат скомпилированного приложения на примере ниже:

result

Was this article helpful?

AppMaster.io 101 Полный курс

10 модулей
2 недели

Не знаете с чего начать? Начните с нашего ускоренного курса для начинающих и изучите AppMaster от А до Я.

Начать обучение
Development it’s so easy with AppMaster!

Остались вопросы?

Наши эксперты с радостью ответят на все ваши вопросы о платформе AppMaster и помогут вам в создании приложений.

headphones

Служба поддержки

Поделитесь своей проблемой с нашими специалистами.

message

Комьюнити AppMaster

Обсудите вопросы с другими пользователями в нашем чате.

Присоединиться