This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
# П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 |
|
||||
| <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>
|
||||
прошёл.
|
||||
|
||||
Вердикт: **пройдено**. У каждого тезиса есть ограничение, а код показывает
|
||||
проверку, не выдавая её за измерение в этом 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.
|
||||
Reference in New Issue
Block a user