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

12 KiB
Raw Blame History

П15 · 2019-05 · автономное тройное ревью «HTTP-кеширование»

Статус: принят в публикационный слой 31 июля 2026 года. Registry накладывает ревизии только по стабильному slug; дата и автор остаются в базовом архиве. Пакет содержит три стабильных slug:

  • editorial-2019-05-practice-http-caching;
  • editorial-2019-05-mechanism-http-caching;
  • editorial-2019-05-field-http-caching.

Созданы только модуль ревизий, этот лист ревью и три SVG в web/public/assets/editorial/2019/. Скрипт не меняет articles.json, registry, стандарт, очередь, Git или файлы агентских партий. Дата ревью: 31 июля 2026 года.

Проход 1. Факты и техника — пройдено

Утверждение Первичный источник Граница утверждения
Свежесть ответа и повторная проверка — разные состояния RFC 7234, 4.2 и RFC 7234, 4.3 Тексты не обещают, что промежуточные кэши одновременно удалят старый ответ после релиза
no-cache допускает хранение, но требует проверки перед повторным использованием; no-store — иной запрет RFC 7234, 5.2 Директивы объяснены для HTTP-кэшей; они не названы защитой от логов, истории и утечек в произвольных слоях
Vary связывает сохранённый вариант с полями запроса, повлиявшими на представление RFC 7234, 4.1 Для CDN прямо сохранена оговорка: конкретный cache key нужно сверить с документацией и конфигурацией поставщика
ETag и If-None-Match позволяют условную проверку с ответом 304 RFC 7234, 4.3 и MDN: HTTP caching Не утверждается, что ETag обязан быть криптографическим хешем или что каждый origin всегда даст 304
Entity-tag в заголовке If-None-Match сохраняет кавычки RFC 7232, 2.3 В примерах используется конкретный entity-tag; реальный ETag нужно взять из ответа своего тестового origin
add_header — директива nginx, а не готовый контракт приложения ngx_http_headers_module Конфигурационный фрагмент отмечен как учебный; наследование заголовков, ошибки и CDN остаются проверкой конкретного проекта
  • Источники RFC 7234 существовали к 2019 году и подходят историческому контексту автора. Современная страница MDN использована как поясняющий источник, но нормативные утверждения привязаны к RFC.
  • Практическая статья различает HTML с постоянным URL, fingerprinted asset, общий короткоживущий API-ответ и персональные данные. Механизм не сводит cache key к URL. Полевой разбор проверяет origin и edge раздельно.
  • Все curl-фрагменты названы командами для безопасного тестового домена. В материале нет выдуманного ответа CDN, production-замера или выполненного purge.
  • В первом самостоятельном синтаксическом проходе был найден неверно экранированный перенос строки в учебной curl-команде. Он устранён до draft-gate: команды сделаны однострочными, а повторный node --check прошёл. Дополнительный факт-проход нашёл отсутствие кавычек вокруг entity-tag в двух командах If-None-Match; после сверки с 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 тыс. и не добраны повторами.
  • У каждой статьи больше пяти смысловых разделов, таблица с thead/scope, SVG с alt и подписью, несколько примеров кода, упорядоченный маршрут и точный раздел «Проверяемые источники».
  • Голос соответствует М2 / 2019: автор связывает знакомые Webpack-assets с HTTP-договором, говорит короткой цепочкой «симптом → причина → проверка → действие», но не приписывает себе зрелую практику глобальной платформы, SLO, массовых инцидентов или универсальных CDN-рецептов.
  • Удалены общие оценки. Каждая рекомендация привязана к URL, входу запроса, заголовку, условному запросу или границе слоя.

Вердикт: пройдено. Тексты расширяют T-shape автора от фронтенд-сборки к доставке HTTP и не скачут к тону техлида 2025 года.

Проход 3. Визуал и выпуск — пройдено для автономного черновика

  • http-cache-response-path-2019.svg показывает три разных контракта: HTML с проверкой, asset с новым URL и API с ограниченной свежестью.
  • http-cache-key-2019.svg отделяет построение ключа по URL/Vary от TTL и условной проверки ETag.
  • http-cache-variant-check-2019.svg проводит два языковых варианта origin и edge к проверке одного варианта через ETag.
  • xmllint --noout принял все три SVG. Внутри нет script, inline event handler, внешних ресурсов или растровых вложений.
  • SVG отрендерены через Sharp в PNG на ширине 720 и 375 px. В мобильном проходе не обнаружено обрезания или горизонтального overflow. На первой схеме длинная подпись API выходила за границу своей карточки на desktop; подпись разделена на две строки, после чего повторный рендер прошёл.
  • Пройдены node --check scripts/upgrade-2019-05.mjs и npm run audit:draft -- scripts/upgrade-2019-05.mjs. CLI печатает только JSON, импорт не имеет побочных эффектов.

После подключения registry основной редактор повторил строгий аудит: все три slug прошли объём 8 068 / 8 174 / 8 949 знаков, figure, таблицы, код, маршруты и источники. npm run build завершился с кодом 0 и сгенерировал 374 статические страницы.

Выпусковой вердикт: принят к публикации. articles.json не менялся; registry заменяет только редакционные поля по стабильному slug.

4. Корректировка после публикации — пройдена

После публикации дополнительный факт-проход заметил, что два учебных примера передавали значение If-None-Match без обязательных кавычек entity-tag. Ошибка не меняла архитектурный вывод, но делала копируемую команду неточной. Примеры исправлены на "catalog-v42" и "catalog-ru-v18", а в источники добавлен RFC 7232, раздел 2.3.

Повторно прошли node --check, draft-gate, строгий аудит трёх slug, XML-проверка SVG и production build на 374 страницы. Корректировка принята отдельным выпускным коммитом поверх существующей истории.