Files
progcode/editorial/reviews/2019-05-draft.md
T
huncode 368fa96733
Build and deploy / deploy (push) Successful in 14s
correct HTTP cache validator examples
2026-07-31 10:35:30 +03:00

110 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# П15 · 2019-05 · автономное тройное ревью «HTTP-кеширование»
Статус: **принят в публикационный слой 31 июля 2026 года**. Registry
накладывает ревизии только по стабильному slug; дата и автор остаются в
базовом архиве.
Пакет содержит три стабильных slug:
- <code>editorial-2019-05-practice-http-caching</code>;
- <code>editorial-2019-05-mechanism-http-caching</code>;
- <code>editorial-2019-05-field-http-caching</code>.
Созданы только модуль ревизий, этот лист ревью и три SVG в
<code>web/public/assets/editorial/2019/</code>. Скрипт не меняет
<code>articles.json</code>, registry, стандарт, очередь, Git или файлы
агентских партий. Дата ревью: 31 июля 2026 года.
## Проход 1. Факты и техника — пройдено
| Утверждение | Первичный источник | Граница утверждения |
| --- | --- | --- |
| Свежесть ответа и повторная проверка — разные состояния | [RFC 7234, 4.2](https://www.rfc-editor.org/rfc/rfc7234#section-4.2) и [RFC 7234, 4.3](https://www.rfc-editor.org/rfc/rfc7234#section-4.3) | Тексты не обещают, что промежуточные кэши одновременно удалят старый ответ после релиза |
| <code>no-cache</code> допускает хранение, но требует проверки перед повторным использованием; <code>no-store</code> — иной запрет | [RFC 7234, 5.2](https://www.rfc-editor.org/rfc/rfc7234#section-5.2) | Директивы объяснены для HTTP-кэшей; они не названы защитой от логов, истории и утечек в произвольных слоях |
| <code>Vary</code> связывает сохранённый вариант с полями запроса, повлиявшими на представление | [RFC 7234, 4.1](https://www.rfc-editor.org/rfc/rfc7234#section-4.1) | Для CDN прямо сохранена оговорка: конкретный cache key нужно сверить с документацией и конфигурацией поставщика |
| ETag и If-None-Match позволяют условную проверку с ответом 304 | [RFC 7234, 4.3](https://www.rfc-editor.org/rfc/rfc7234#section-4.3) и [MDN: HTTP caching](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Caching) | Не утверждается, что ETag обязан быть криптографическим хешем или что каждый origin всегда даст 304 |
| Entity-tag в заголовке If-None-Match сохраняет кавычки | [RFC 7232, 2.3](https://www.rfc-editor.org/rfc/rfc7232#section-2.3) | В примерах используется конкретный entity-tag; реальный ETag нужно взять из ответа своего тестового origin |
| <code>add_header</code> — директива nginx, а не готовый контракт приложения | [ngx_http_headers_module](https://nginx.org/en/docs/http/ngx_http_headers_module.html) | Конфигурационный фрагмент отмечен как учебный; наследование заголовков, ошибки и CDN остаются проверкой конкретного проекта |
- Источники RFC 7234 существовали к 2019 году и подходят историческому
контексту автора. Современная страница MDN использована как поясняющий
источник, но нормативные утверждения привязаны к RFC.
- Практическая статья различает HTML с постоянным URL, fingerprinted asset,
общий короткоживущий API-ответ и персональные данные. Механизм не сводит
cache key к URL. Полевой разбор проверяет origin и edge раздельно.
- Все curl-фрагменты названы командами для безопасного тестового домена. В
материале нет выдуманного ответа CDN, production-замера или выполненного
purge.
- В первом самостоятельном синтаксическом проходе был найден неверно
экранированный перенос строки в учебной curl-команде. Он устранён до
draft-gate: команды сделаны однострочными, а повторный <code>node --check</code>
прошёл. Дополнительный факт-проход нашёл отсутствие кавычек вокруг entity-tag
в двух командах <code>If-None-Match</code>; после сверки с RFC 7232 кавычки
возвращены, а source list дополнен первичным источником.
Вердикт: **пройдено**. У каждого тезиса есть ограничение, а код показывает
проверку, не выдавая её за измерение в этом workspace.
## Проход 2. Редактура и голос М2 — пройдено
| Ревизия | Симптом и цена в начале | Главный вопрос | Проверяемый результат |
| --- | --- | --- | --- |
| Практика | После релиза показывается вчерашняя цена или несогласованный HTML; цена — неверное решение пользователя и слепая правка TTL | Как дать HTML, fingerprinted asset и API разные контракты | Карта URL/заголовков, условный запрос и порядок изменения |
| Механизм | Один браузер уже видит обновление, другой получает старый вариант; цена — поиск виновника в числе секунд вместо key | Почему TTL не заменяет Vary и ETag | Дерево «ключ → свежесть → проверка» и два запроса с разным языком |
| Поле | Публичный URL отдаёт чужой язык при корректном origin; цена — неверный интерфейс и спор между переводом и CDN | Как локализовать расхождение origin и edge | Два безопасных curl-сценария, тела, заголовки и матрица следующего шага |
- Строгий draft-gate считает 8 068 / 8 174 / 8 949 знаков основного текста;
все значения находятся в диапазоне 5–15 тыс. и не добраны повторами.
- У каждой статьи больше пяти смысловых разделов, таблица с
<code>thead</code>/<code>scope</code>, SVG с <code>alt</code> и подписью,
несколько примеров кода, упорядоченный маршрут и точный раздел
«Проверяемые источники».
- Голос соответствует М2 / 2019: автор связывает знакомые Webpack-assets с
HTTP-договором, говорит короткой цепочкой «симптом → причина → проверка →
действие», но не приписывает себе зрелую практику глобальной платформы,
SLO, массовых инцидентов или универсальных CDN-рецептов.
- Удалены общие оценки. Каждая рекомендация привязана к URL, входу запроса,
заголовку, условному запросу или границе слоя.
Вердикт: **пройдено**. Тексты расширяют T-shape автора от фронтенд-сборки к
доставке HTTP и не скачут к тону техлида 2025 года.
## Проход 3. Визуал и выпуск — пройдено для автономного черновика
- <code>http-cache-response-path-2019.svg</code> показывает три разных
контракта: HTML с проверкой, asset с новым URL и API с ограниченной
свежестью.
- <code>http-cache-key-2019.svg</code> отделяет построение ключа по URL/Vary
от TTL и условной проверки ETag.
- <code>http-cache-variant-check-2019.svg</code> проводит два языковых
варианта origin и edge к проверке одного варианта через ETag.
- <code>xmllint --noout</code> принял все три SVG. Внутри нет
<code>script</code>, inline event handler, внешних ресурсов или растровых
вложений.
- SVG отрендерены через Sharp в PNG на ширине 720 и 375 px. В мобильном
проходе не обнаружено обрезания или горизонтального overflow. На первой
схеме длинная подпись API выходила за границу своей карточки на desktop;
подпись разделена на две строки, после чего повторный рендер прошёл.
- Пройдены <code>node --check scripts/upgrade-2019-05.mjs</code> и
<code>npm run audit:draft -- scripts/upgrade-2019-05.mjs</code>. CLI
печатает только JSON, импорт не имеет побочных эффектов.
После подключения registry основной редактор повторил строгий аудит: все три
slug прошли объём 8 068 / 8 174 / 8 949 знаков, figure, таблицы, код,
маршруты и источники. <code>npm run build</code> завершился с кодом 0 и
сгенерировал 374 статические страницы.
Выпусковой вердикт: **принят к публикации**. <code>articles.json</code> не
менялся; registry заменяет только редакционные поля по стабильному slug.
## 4. Корректировка после публикации — пройдена
После публикации дополнительный факт-проход заметил, что два учебных примера
передавали значение <code>If-None-Match</code> без обязательных кавычек
entity-tag. Ошибка не меняла архитектурный вывод, но делала копируемую команду
неточной. Примеры исправлены на <code>"catalog-v42"</code> и
<code>"catalog-ru-v18"</code>, а в источники добавлен RFC 7232, раздел 2.3.
Повторно прошли <code>node --check</code>, draft-gate, строгий аудит трёх slug,
XML-проверка SVG и production build на 374 страницы. Корректировка принята
отдельным выпускным коммитом поверх существующей истории.