Концентратор (хаб) - самое простое устройство, которое раскидывает входящие пакеты данных по всем портам.
Коммутатор (свитч) - распределяет пакеты данных не всем подключенным устройствам, а учитывает MAC-адреса устройств, подключенных к соответствующим портам.
Маршрутизатор (роутрер) - более продвинутый чем свитч, позволяет настройки.
Уровни протокола TCP/IP: 1) Прикладной уровень или уровень приложения - FTP, SMB (или самба для доступа к сетевым директориям), HTTP, HTTPS, SSH, DNS. 2) Транспортный уровень - уровень протоколов TCP, UDP. 3) Межсетевой уровень - уровень протокола IP 4) Канальный уровень - как передаются данные
Порт определяет какому приложение пришел тот или иной пакет.
MX-запись — для почтового сервера.
$ nc google.com 80
HEAD / HTTP/1.0
HTTP-статусы ответа:
200 OK
— при обработке запроса не возникло ошибок, всё в порядке, нормальный запрос и нормальный ответ;
201 CREATED
— данные успешно созданы на сервере, этот ответ применяется для методов POST и PUT. Почему для PUT он может применяться, у нас же PUT не создаёт данные? На самом деле PUT тоже может создавать новые записи, если клиент генерирует их идентификаторы, как мы узнаем позже;
204 NO CONTENT
— запрос успешно обработан, но в теле нет данных для ответа, этот статус может использоваться для DELETE-запросов, то есть удалили и удалили, что тут еще скажешь, или PUT-запросов — обновили данные и обновили, всё;
301 MOVED PERMANENTLY
— веб-страница «переехала» на новый адрес на постоянной основе, это статус для переадресации, когда мы заходим в браузере на одну веб-страницу, а нас автоматически перебрасывает на другую. Один из способов сделать такое — как раз веб-серверу в HTTP заголовке отдать статус 301 и указать новый адрес страницы;
304 NOT MODIFIED
— содержимое страницы не изменилось с прошлого запроса и его не нужно загружать снова;
400 BAD REQUEST
— этот статус говорит о какой-то общей ошибке запроса, без конкретики;
401 UNAUTHORIZED
— в запросе не передан корректный токен аутентификации, то есть его нет или он некорректный. Токен аутентификации — это строка, которая идентифицирует пользователя, который выполняет запрос, как правило токен аутентификации выдаётся пользователю после аутентификации, то есть ввода логина и пароля на сервисе;
403 FORBIDDEN
— пользователь сейчас не авторизован для доступа к этому веб-сервису, то есть у него нет для этого прав;
404 NOT FOUND
— пожалуй, самый известный HTTP статус, страница или ресурс не найдены. Возникает, когда веб-сервер не находит у себя запрашиваемый адрес. Например, веб-сервер Google на момент написания этих строк ничего не знает об адресе http://google.com/chto-proiskhodit/
, если вы откроете её в браузере, то увидите ошибку 404, а также увидите 404 HTTP статус, если отправите на этот адрес запрос с использованием Telnet (попробуйте!);
405 METHOD NOT ALLOWED
— показывает, что веб-сервис в целом существует, но не может обработать переданный HTTP-метод, этот метод для этого сервиса недопустим;
409 CONFLICT
— конфликт, чаще всего при выполнении PUT-запроса. Например, в нашей БД у каждого пользователя уникальный email, и вот один из пользователей пытается обновить в своем профиле email на тот, что уже есть у другого пользователя в нашей БД — тогда 409й статус это отличный вариант сказать клиентскому коду о том, что происходит;
422 UNPROCESSABLE ENTITY
— синтаксис запроса верный, но какое-то значение некорректно. Например, запрос ожидает, что будет передан телефон в формате +79…, а телефон передан в другом формате;
500 Internal Server Error
— внутренняя ошибка сервера, на сервере что-то пошло не так, без уточнения что именно;
501 NOT IMPLEMENTED
— сервер не может выполнить запрос, так как он не распознаёт запрос, например, потому что переданный HTTP-метод неизвестен;
502 BAD GATEWAY
— ошибка шлюза, когда сервер, стоящий за прокси-сервером, падает — если пока не поняли, о чем речь, не страшно, дальше разберемся;
503 SERVICE UNAVAILABLE
— сервис недоступен, например, потому что что-то на нём сейчас перезагружается.
Разделение по типам:
2xx
— успешные ответы;
3xx
— редирект, то есть перенаправление на другой адрес;
4хх
— ошибки клиентского запроса, когда запрос неверный, например, запрос несуществующей страницы или запрос с неправильными данными, неправильной структурой и так далее;
5xx
— ошибка сервера. Может быть много разных серверных ошибок, все они имеют номера, начинающиеся с пятерки.
Set-Cookie: cookie-name=cookie-value; Domain=domain-value
Например — кука с именем name
и значением Alexey
для домена google.com
:
Set-Cookie: name=Alexey; Domain=google.com
передача данных в составе элемента пути, например, https://google.com/search/python
или https://rroom.io/user/alexey.goloburdin
query-параметры, например, https://google.com/search?q=python&start=10&lang=ru
. Если надо использовать символ &
в составе значения параметра, он заменяется на %26
: google.com/search?q=you%26me
. Для пробелам замена на %20
.
передача в теле запроса, например, в теле POST-запроса
в cookies
в HTTP-заголовках запроса, в том числе своих HTTP-заголовках запроса (HTTP это позволяет)
есть и другие варианты, например, веб-сокеты, но это уже специфика для своих задач
Как может выглядеть API для CRUD-операций по книгам:
POST /books/
— создание новой книги
GET /books/
— чтение списка книг. Пагинация, то есть разбитие списка книг на страницы, осуществляется Query-параметрами, например, так:
GET /books/?page=3
. Параметр page
равен 3
. Наш бэкенд-сервис считает эти параметры и поймет, что запрашивается страница с номером 3. Аналогично для каких-то динамических фильтров могут использоваться тоже query-параметры.
GET /books/123
— получение информации по книге с идентификатором 123
PUT /books/123
— обновление информации по книге с идентификатором 123
— причем обновляется вся книга, то есть должны быть переданы все поля книги этому сервису на вход
PATCH /books/123
— частичное обновление книги с идентификатором 123
, например, только её названия. Если этот сервис примет на вход только название книги, то он должен изменить название книги и всё
DELETE /books/123
— удаление данных о книге с идентификатором 123
Каждый из этих веб-сервисов отдаёт свои HTTP-статусы, которые подробно говорят клиенту о том, что именно произошло на бэкенде с запросом, например:
если клиент запрашивает список книг и книги найдены, то статус 200
;
если клиент запрашивает одну книгу по идентификатору и книга не найдена, то статус 404
;
если клиент пытается добавить книгу, но не передал токен аутентификации или токен некорректный, то 401
;
если клиент передал корректный токен аутентификации, но пользователю почему-то нельзя добавлять книги — например, если их могут добавлять на сайт только какие-то конкретные пользователи, не все, то статус 403
;
если пытается обновить несуществующую книгу — 404
;
если клиент создал новую книгу успешно — 201
;
если клиент успешно обновил книгу — 204
или 200
.
Также относительно недавно вышла книга на русском языке «HTTP/2 в действии», Поллард Б. Книга описывает нововведения и особенности второй версии протокола HTTP (будем об этом говорить в следующей главе).
И также неплохие материалы по HTTP (как и по другим темам веб-технологий) приведены на сайте MDN, Mozilla Developer Network, ссылка. В частности тут приведены отличные описание HTTP-статусов.
Когда будем изучать фронтенд-технологии, мы будем часто обращаться к сайту MDN, поэтому берите его сразу на заметку и в целом можете начинать читать его.