Встречается на 26% собеседований по PHP

Что из себя представляет http-запрос

HTTP-запрос — это структурированное сообщение, которое клиент (обычно веб-браузер) отправляет на сервер для запроса ресурса, такого как веб-страница, изображение или данные. Он является основой взаимодействия в веб-приложениях и состоит из стартовой строки, заголовков, пустой строки и необязательного тела.

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

Каждый HTTP-запрос включает четыре основных компонента:

  1. Стартовая строка — первая строка запроса, содержащая три элемента:

    • Метод HTTP — тип операции, которую хочет выполнить клиент. Распространённые методы: GET (получить данные), POST (отправить данные на сервер), PUT (обновить ресурс), DELETE (удалить ресурс).
    • Целевой URI — путь к запрашиваемому ресурсу, например /index.html.
    • Версия протокола — используемая версия HTTP, например HTTP/1.1.
  2. Заголовки — набор пар «ключ: значение», передающих служебную информацию о запросе и клиенте. Примеры: Host (домен сервера), User-Agent (тип браузера), Accept (допустимые форматы ответа), Content-Type (тип тела запроса).

  1. Пустая строка — обязательная строка, отделяющая заголовки от тела. Она присутствует всегда, даже если тело отсутствует.

  2. Тело запроса — необязательная часть, содержащая данные, отправляемые на сервер. Обычно используется в методах POST и PUT для передачи форм, JSON или файлов. В GET и DELETE тело, как правило, отсутствует.

Пример HTTP-запроса

Рассмотрим запрос методом GET:

http
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5

Здесь клиент запрашивает страницу index.html с сайта www.example.com. Заголовки сообщают серверу, какой браузер используется и какие форматы ответа клиент готов принять. Тело отсутствует, так как GET не передаёт данных.

Подводные камни и особенности

  • Пустая строка обязательна — её отсутствие может привести к ошибке парсинга запроса на сервере.
  • Размер заголовков — большинство серверов ограничивают длину заголовков (например, 8 КБ в nginx), поэтому не стоит передавать большие объёмы данных в заголовках.
  • Методы и тело — для GET и DELETE тело обычно игнорируется или запрещено, хотя спецификация не запрещает его явно. На практике лучше не отправлять тело в этих методах.
  • Кодировка данных — при отправке формы через POST данные в теле должны быть закодированы в соответствии с Content-Type (например, application/x-www-form-urlencoded или multipart/form-data).

Когда использовать

Понимание структуры HTTP-запроса необходимо при разработке веб-приложений, отладке сетевых взаимодействий, написании API-клиентов и серверов. Знание методов и заголовков помогает правильно проектировать REST API и оптимизировать обмен данными.

Коротко

  • HTTP-запрос состоит из стартовой строки, заголовков, пустой строки и тела (необязательно).
  • Стартовая строка включает метод, URI и версию протокола.
  • Заголовки передают метаданные о запросе и клиенте.
  • Тело используется в POST и PUT для передачи данных; в GET и DELETE обычно отсутствует.
  • Пустая строка обязательна для корректного разбора запроса.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы