Связаться
Изображение
Миша Радионов

HTTP. Методы, статус-коды, заголовки, редиректы, SSL

Опубликовано: 06 мая 2021
Вернуться в блог

Что отличает настоящего айтишника?

Настоящий знает, как работает Интернет. Рассказываем для всех простым языком, как работает HTTP.

Видео

HTTP

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

В HTTP и запрос, и ответ имеют похожую структуру:

  1. URL
  2. Метод
  3. Версия HTTP
  4. Заголовки
  5. Статус-код (обязательно только для HTTP-ответов)
  6. Тело (необязательно)

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

POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

licenseID=string&content=string&/paramsXML=string

, где

Пример HTTP-ответа:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed

<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>

В данном ответе отсутствует URL и метод, зато появился статус-код 200, означающий «успех».

URL запроса

Структура URL-адреса

http://blog.example.com:80/catalog/category/knifes?key1=value1&amp;amp;key2=value2#anchor

где

Абсолютные и относительные URL

Абсолютные адреса в проекте — зло. Используйте относительные.

Абсолютный URL

https://developer.mozilla.org/ru/docs/Learn

Абсолютный URL, скрыт протокол

//developer.mozilla.org/ru/docs/Learn

Относительный URL (неправильно) 🚫

ru/docs/Learn

если мы на странице https://domain.ru/ru/about, то преобразуется в https://domain.ru/ru/aboutru/docs/Learn

Относительный URL (правильно) ✅

/ru/docs/Learn

если мы на странице https://domain.ru/ru/about, то преобразуется в https://domain.ru/ru/docs/Learn

Якоря (анкоры) ⚓️

Якоря придуманы в HTML, чтобы давать ссылки не просто на HTML-страницу, а на определенное место на странице. Позже якоря стали активно использоваться для передачи параметров в JS.

URL с якорем

https://domain.ru/url#someAnchor

HTML-элемент, на который ведет якорь








<h2 name="someAnchor">Заголовок с якорем</h2>








Методы HTTP-запросов

Если при повторении одного и того же запроса на сервере ничего не меняется, запрос считается идемпотентным. Если повторение одинакового запроса несколько раз изменяет состояние сервера, то он не идемпотентен и, вообще говоря, менее безопасен.

Метод POST-параметры Идемпотентность Предназначение
GET нет да получает информацию о ресурсе
POST да нет создает ресурс
PUT да да заменяет ресурс целиком
PATCH да да редактирует ресурс
DELETE нет да удаляет ресурс
HEAD нет да не получает body, только отправляет и получает HTTP-заголовки

PUT заменяет существующую сущность. Те элементы сущности, которые не представлены в запросе, будут очищены или заменены на null.

GET и POST параметры

В контексте методов HTTP-запросов стоит упомянуть GET и POST параметры, так как вы будете постоянно с ними встречаться и так проще понять, как используются методы.

GET-параметры передаются в URL запроса. Пример URL с GET-параметрами я приводил выше. Любой из перечисленных ниже методов может иметь или не иметь GET-параметры, это совершенно нормально.

POST-параметры — это любые параметры, передаваемые в теле (body) запроса. POST-параметры не следует использовать для некоторых методов, например, для GETDELETE и HEAD.

Статус-коды ответа

По группам

Популярные коды ответа

Коды ответа, как и заголовки, можно посмотреть в браузере на вкладке Network или получить командой curl -I domain.ru. В отличие от заголовков, коды ответа бывают только в ответе и не используются в запросе.

Заголовки HTTP

Заголовки — часть HTTP-запроса и/или HTTP-ответа, они не видимы пользователю. Представляют собой пары ключ: значение. Заголовки можно посмотреть в браузере на вкладке Network или получить командой curl -I domain.ru (так можно получить только заголовки ответа сервера).

Заголовки запроса

Заголовки ответа

HTTP-редиректы

Редиректы — способ перенаправить браузер на другой URL. Это похоже на то, как если бы вы пришли в магазин и там увидели надпись «мы переехали, вот наш новый адрес». После этого вы идете в магазин по новому адресу. Важно понимать, что редирект со стороны сайта лишь просит ваш браузер перейти на другой адрес, а не подсовывает вам другую страницу. Другими словами, технически редирект происходит на стороне клиента, а не сервера.

www и http://

Проверка редиректов очень важна для проверки настроек префиксов домена типа www и http/https.

То есть у каждого домена обычно есть 4 варианта написания:

И 3 из этих 4 вариантов обязательно должны ссылаться на один из них, то есть на главный. Главный вариант определяет заказчик, но обычно это https://domain.ru

Инструменты

Редиректы можно проверить браузером через вкладку Network


Разработчикам будет удобнее воспользоваться утилитой

	curl -I -L https://domain.ru

Как сбросить кэш редиректов браузера

На Windows нажать ctrl+H, затем «очистить историю», оставить включенной (отжатой) только галочку напротив «Изображения и другие файлы, сохраненные в кэше». Затем нажать «удалить данные».

SSL шифрование

Принцип — передача только зашифрованных данных.

Типы SSL-сертификатов

Диагностика SSL

Если на сайте проблемы с SSL, то причина — в одном из двух:

На скриншоте видно, как посмотреть подробности о сертификате и наличие ошибок в странице. Конкретно на этом скриншоте показана вторая проблема, так называемая «mixed-content error», то есть часть контента прилетает по HTTP.

Для диагности SSL на вашем сайте вы также можете использовать онлайн-сервис  https://www.ssllabs.com/ssltest/ .
Учтите, данные о сертификате, как и HTTP-редиректы, сильно кэшируются браузером. Сбрасываются так же, как кэш редиректов (смотрите выше).

Версии HTTP

HTTP/2

Суть — мультиплексирование запросов по TCP.

Преимущества перед HTTP/1.1

Минусы

Распространение: По данным W3Techs на 1 ноября 2020 года, 49% из 10 млн самых популярных интернет-сайтов поддерживают протокол HTTP/2.

Подробная статья с понятными картинками — https://habr.com/ru/company/nix/blog/304518/

HTTP/3

Суть — мультиплексирование по UDP.

Преимущества перед HTTP/2:

Минусы:

Результаты: По данным Google, страницы загружаются примерно на 5% быстрее, а в потоковом видео на 30% меньше подвисаний по сравнению с TCP.

Распространение: По данным W3Techs на 1 сентября 2020 года, 7% из 10 млн самых популярных интернет-сайтов поддерживают протокол HTTP/3.

Если у вас появились какие-то вопросы, вы можете задать их в комментариях, а мы на них ответим 🙂