Содержание
Что отличает настоящего айтишника?
Настоящий знает, как работает Интернет. Рассказываем для всех простым языком, как работает HTTP.
В HTTP и запрос, и ответ имеют похожую структуру:
Пример 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
, где
POST
— метод,/cgi-bin/process.cgi
— URL,HTTP/1.1
— версия протокола HTTP,User-Agent
, Host
и другие — заголовки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
, означающий «успех».
http://blog.example.com:80/catalog/category/knifes?key1=value1&amp;key2=value2#anchor
где
Абсолютные адреса в проекте — зло. Используйте относительные.
Абсолютный 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>
Если при повторении одного и того же запроса на сервере ничего не меняется, запрос считается идемпотентным. Если повторение одинакового запроса несколько раз изменяет состояние сервера, то он не идемпотентен и, вообще говоря, менее безопасен.
Метод | POST-параметры | Идемпотентность | Предназначение |
---|---|---|---|
GET | нет | да | получает информацию о ресурсе |
POST | да | нет | создает ресурс |
PUT | да | да | заменяет ресурс целиком |
PATCH | да | да | редактирует ресурс |
DELETE | нет | да | удаляет ресурс |
HEAD | нет | да | не получает body, только отправляет и получает HTTP-заголовки |
PUT заменяет существующую сущность. Те элементы сущности, которые не представлены в запросе, будут очищены или заменены на null.
В контексте методов HTTP-запросов стоит упомянуть GET и POST параметры, так как вы будете постоянно с ними встречаться и так проще понять, как используются методы.
GET-параметры передаются в URL запроса. Пример URL с GET-параметрами я приводил выше. Любой из перечисленных ниже методов может иметь или не иметь GET-параметры, это совершенно нормально.
POST-параметры — это любые параметры, передаваемые в теле (body) запроса. POST-параметры не следует использовать для некоторых методов, например, для GET, DELETE и HEAD.
Коды ответа, как и заголовки, можно посмотреть в браузере на вкладке Network или получить командой curl -I domain.ru
. В отличие от заголовков, коды ответа бывают только в ответе и не используются в запросе.
Заголовки — часть HTTP-запроса и/или HTTP-ответа, они не видимы пользователю. Представляют собой пары ключ: значение. Заголовки можно посмотреть в браузере на вкладке Network или получить командой curl -I domain.ru
(так можно получить только заголовки ответа сервера).
Редиректы — способ перенаправить браузер на другой URL. Это похоже на то, как если бы вы пришли в магазин и там увидели надпись «мы переехали, вот наш новый адрес». После этого вы идете в магазин по новому адресу. Важно понимать, что редирект со стороны сайта лишь просит ваш браузер перейти на другой адрес, а не подсовывает вам другую страницу. Другими словами, технически редирект происходит на стороне клиента, а не сервера.
Проверка редиректов очень важна для проверки настроек префиксов домена типа www
и http
/https
.
То есть у каждого домена обычно есть 4 варианта написания:
И 3 из этих 4 вариантов обязательно должны ссылаться на один из них, то есть на главный. Главный вариант определяет заказчик, но обычно это https://domain.ru
Редиректы можно проверить браузером через вкладку Network
Разработчикам будет удобнее воспользоваться утилитой
curl -I -L https://domain.ru
На Windows нажать ctrl+H, затем «очистить историю», оставить включенной (отжатой) только галочку напротив «Изображения и другие файлы, сохраненные в кэше». Затем нажать «удалить данные».
Принцип — передача только зашифрованных данных.
Типы SSL-сертификатов
Если на сайте проблемы с SSL, то причина — в одном из двух:
На скриншоте видно, как посмотреть подробности о сертификате и наличие ошибок в странице. Конкретно на этом скриншоте показана вторая проблема, так называемая «mixed-content error», то есть часть контента прилетает по HTTP.
Для диагности SSL на вашем сайте вы также можете использовать онлайн-сервис https://www.ssllabs.com/ssltest/ .
Учтите, данные о сертификате, как и HTTP-редиректы, сильно кэшируются браузером. Сбрасываются так же, как кэш редиректов (смотрите выше).
Суть — мультиплексирование запросов по TCP.
Преимущества перед HTTP/1.1
Минусы
Распространение: По данным W3Techs на 1 ноября 2020 года, 49% из 10 млн самых популярных интернет-сайтов поддерживают протокол HTTP/2.
Подробная статья с понятными картинками — https://habr.com/ru/company/nix/blog/304518/
Суть — мультиплексирование по UDP.
Преимущества перед HTTP/2:
Минусы:
Результаты: По данным Google, страницы загружаются примерно на 5% быстрее, а в потоковом видео на 30% меньше подвисаний по сравнению с TCP.
Распространение: По данным W3Techs на 1 сентября 2020 года, 7% из 10 млн самых популярных интернет-сайтов поддерживают протокол HTTP/3.
Если у вас появились какие-то вопросы, вы можете задать их в комментариях, а мы на них ответим 🙂