Стандарты и сертификаты · тема 3
4

Стандарты интернета:
HTTP, JSON, дата и текст

Браузер, сервер и мобильное приложение разных производителей работают вместе, потому что следуют одним документам. В главе разобраны стандарты, на которых держится обмен данными: HTTP, JSON, запись даты и времени, кодирование текста.

Документы
RFC 9110 · RFC 8259 · RFC 3339 · RFC 9457 · ISO 8601 · ISO/IEC 10646
Уровень
Базовый
Где встречается
Любой сайт, API, журнал сервера
Зачем это знать
Чтобы читать журналы и проектировать API по общим правилам

§1Что такое RFC

RFC — серия документов, в которой публикуются стандарты интернета. Выпускает их Инженерный совет Интернета (IETF). Тексты бесплатны и лежат на сайте rfc-editor.org.

У каждого RFC постоянный номер. Текст опубликованного документа не меняют: новая редакция выходит под новым номером, а в шапке старого появляется строка «Obsoleted by».

RFC 9110 «HTTP Semantics» на сайте rfc-editor.org.
RFC 9110 «HTTP Semantics» на сайте rfc-editor.org. В шапке указаны номер, статус Internet Standard, дата и документы, которые этот RFC заменил.
ДокументЧто описываетГод
RFC 9110смысл методов, кодов ответа и заголовков HTTP2022
RFC 8259формат JSON2017
RFC 3339запись даты и времени в интернете, профиль ISO 86012002
RFC 9457формат описания ошибки в HTTP API (Problem Details)2023
RFC 8446протокол TLS версии 1.32018

§2Методы HTTP

RFC 9110 делит методы по двум свойствам. Безопасный метод не меняет состояние ресурса. Идемпотентный метод при повторе даёт то же состояние, что и после первого вызова.

МетодНазначениеБезопасныйИдемпотентный
GETполучить ресурсдада
HEADполучить только заголовкидада
OPTIONSузнать доступные методыдада
PUTзаменить ресурс целикомнетда
DELETEудалить ресурснетда
POSTсоздать ресурс или выполнить действиенетнет
PATCHизменить часть ресурсанетнет

От этих свойств зависит поведение при сбое связи. Запрос GET или DELETE клиент может повторить без последствий. Повторный POST создаст вторую запись.

§3Коды ответа

Первая цифра кода задаёт класс ответа.

КлассСмыслПримеры
2xxзапрос выполнен200 OK · 201 Created · 206 Partial Content
3xxперенаправление301 Moved Permanently · 304 Not Modified
4xxошибка на стороне клиента400 Bad Request · 401 Unauthorized · 403 Forbidden · 404 Not Found · 429 Too Many Requests
5xxошибка на стороне сервера500 Internal Server Error · 503 Service Unavailable
запрос и ответ целиком, как их видит curl -v
> GET /api/tickets/42 HTTP/1.1
> Host: kursblinovskoy.example
> Accept: application/json
> Authorization: Bearer eyJhbGciOiJIUzI1NiJ9…
>
< HTTP/1.1 200 OK
< Content-Type: application/json; charset=utf-8
< Content-Length: 118
< Cache-Control: no-store
< Date: Wed, 07 Oct 2026 08:14:22 GMT
<
{"id": 42, "subject": "Не открывается урок 3", "status": "in_progress", "created_at": "2026-10-06T19:02:11+03:00"}

Строки со знаком «>» отправил клиент, со знаком «<» — сервер. Первая строка запроса — метод, путь и версия протокола; первая строка ответа — версия и код. Ниже идут заголовки, пустая строка и тело. Заголовок Date записан в формате, который задаёт RFC 9110, а дата в теле — по ISO 8601.

строка журнала веб-сервера: что в ней
198.51.100.77 - - [25/Sep/2026:04:17:52 +0300] "GET /static/backup/users.csv HTTP/1.1" 200 1148896 "-" "python-requests/2.32"
│              │    │                           │                                     │   │         │      └ программа клиента
│              │    │                           │                                     │   │         └ откуда пришёл (Referer)
│              │    │                           │                                     │   └ байт передано
│              │    │                           │                                     └ код ответа
│              │    └ время запроса              └ метод, путь, версия
└ адрес клиента

Код 401 означает, что клиент не представился. Код 403 означает, что клиент известен, но доступа к ресурсу у него нет. Код 206 сообщает, что передана часть файла: в журнале сервера по нему видно, что файл не был получен целиком.

§4Дата и время по ISO 8601

ISO 8601 задаёт запись даты и времени от крупной единицы к мелкой: год, месяц, день, часы, минуты, секунды. Такая запись однозначна в любой стране и сортируется как текст.

ЗаписьЧто означает
2026-09-1616 сентября 2026 года
08:14:228 часов 14 минут 22 секунды
2026-09-16T08:14:22+03:00дата и время, местное время опережает UTC на три часа
2026-09-16T05:14:22Zтот же момент по UTC; буква Z заменяет +00:00
PT24Hдлительность 24 часа
2026-W3838-я неделя 2026 года
Страница о стандарте ISO 8601 на сайте ISO.
Страница о стандарте ISO 8601 на сайте ISO. Сам текст стандарта платный. Для интернета его общеупотребительную часть повторяет бесплатный RFC 3339.

§5JSON, Юникод и UTF-8

Формат JSON описан в RFC 8259. В нём шесть видов значений: объект, массив, строка, число, логическое значение и null. Комментарии и запятая после последнего элемента форматом не предусмотрены.

Правильный и неправильный JSON

так не надо
{
  'id': 42,            // номер заявки
  status: "new",
  "tags": ["вход", "урок",],
  "price": NaN
}
так надо
{
  "id": 42,
  "status": "new",
  "tags": ["вход", "урок"],
  "price": null
}

Слева пять нарушений RFC 8259: одинарные кавычки, комментарий, ключ без кавычек, запятая после последнего элемента и значение NaN, которого в JSON нет.

Юникод — стандарт, который присваивает номер каждому символу всех письменностей; тот же набор закреплён в ISO/IEC 10646. UTF-8 — способ записать эти номера байтами. RFC 8259 требует, чтобы JSON при обмене между системами был в UTF-8.

RFC 8259 на сайте IETF.
RFC 8259 на сайте IETF. Справа — сведения о документе: статус, авторы, какие RFC он заменил.

§6Частые ошибки

Считать код 206 ошибкойЭто успешный ответ с частью содержимого.
Путать 401 и 403401 — клиент не представился, 403 — доступ запрещён известному клиенту.
Изменять данные запросом GETGET — безопасный метод; его повторяют роботы и кеши.
Передавать дату как 16/09/26В разных странах её прочтут по-разному. В обмене данными — 2026-09-16.
Писать комментарии в JSONФормат их не допускает, разборщик вернёт ошибку.

§7Проверьте себя

  1. Кто выпускает RFC и что происходит со старым документом, когда выходит новая редакция?
  2. Какие методы HTTP безопасны? Какие идемпотентны, но не безопасны?
  3. Чем отличаются коды 401 и 403? Что означает код 206?
  4. Запишите по ISO 8601 момент «16 сентября 2026 года, 8:14 утра по Москве».
  5. Чем Юникод отличается от UTF-8?
RFC9110 — семантика HTTP8259 — JSON3339 — дата и время9457 — описание ошибки
HTTPGET, HEAD, OPTIONS — безопасныеPUT, DELETE — идемпотентные2xx 3xx 4xx 5xx401 ≠ 403
Данные2026-09-16T08:14:22+03:00Z — UTCJSON в UTF-8Юникод — набор символов

Справочник «Стандарты и сертификаты» · глава 4Макаров Максим Николаевич

Кадр