惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
GRAHAM CLULEY
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
Forbes - Security
Forbes - Security
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Last Watchdog
The Last Watchdog
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
SecWiki News
SecWiki News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
小众软件
小众软件
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
L
LINUX DO - 最新话题
腾讯CDC
博客园 - 三生石上(FineUI控件)
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
博客园 - 叶小钗
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Webroot Blog
Webroot Blog
Google Online Security Blog
Google Online Security Blog
S
Security @ Cisco Blogs
S
Schneier on Security
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
Hacker News: Ask HN
Hacker News: Ask HN
T
Tenable Blog
V
V2EX
J
Java Code Geeks
AWS News Blog
AWS News Blog
博客园 - 司徒正美
V
Visual Studio Blog
T
The Exploit Database - CXSecurity.com
H
Hacker News: Front Page
Security Latest
Security Latest
月光博客
月光博客
The Hacker News
The Hacker News
T
Tor Project blog
Project Zero
Project Zero
P
Privacy & Cybersecurity Law Blog
阮一峰的网络日志
阮一峰的网络日志

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Готовимся к отключению. Эффективные форматы для упаковки и раздачи HTML-страниц
alizar (RUVD · 2026-04-20 · via Все публикации подряд на Хабре

Уровень сложностиПростой

Время на прочтение7 мин

Охват и читатели2.6K

Обзор

В 2026 году растёт риск перебоев и ограничений в работе интернета в РФ. В таких условиях имеет смысл заранее продумать, как сохранить привычное окружение при нестабильном доступе к сети.

Помимо личных файлов, кино и музыки, хочется сохранить архив сайтов и веб-страниц для чтения в будущем — на месяцы или даже годы вперёд. Но в каком формате это лучше делать?

ПК для Апокалипсиса

«ПК для Апокалипсиса» — офлайновая система, которая хранит полный набор необходимой информации для жизни без интернета. Это известная проблема, которую решают по-разному. Например, на Хабре упоминали репозиторий Project N.O.M.A.D. — это локальная база знаний для выживания:

  • Википедия, медицинские справочники и учебники;

  • карты и навигация всей планеты;

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

В статьях на Хабре обсуждалось создание офлайновой станции для личного пользования на случай отключения интернета. Что в неё можно добавить, кроме Википедии и справочников:

  • Личная коллекция музыки MP3

  • Подборка кинофильмов на несколько десятилетий: например, несколько сотен сериалов и несколько тысяч фильмов, включая всех номинантов Оскара за все годы, все фильмы любимых режиссёров, все фильмы с оценкой выше 7.5 и т. д..

  • Художественная литература

  • Копии личных документов, кошельков, база паролей

  • Семейный архив (фото и видео)

  • Офлайновый мессенджер, работающий в mesh-сети по радио (Wi-Fi, Bluetooth, УКВ)

  • Копии сайтов и веб-страниц для последующего прочтения или поиска по ним.

  • и др.

Нас особенно интересует предпоследний пункт, потому что возможны варианты — в каком формате сохранять сайты и страницы.

Локальные копии веб-сайтов

Для скачивания сайтов целиком в 90-е использовался менеджер загрузки Teleport Pro, который рекурсивно проходился по всем ссылкам и делал полную копию веб-сайта. К сожалению, новые версии давно не выпускались, а последняя существующая версия 1.72 от 2015 года не умеет скачивать сайты по HTTPS, только обычные HTTP.

Поэтому приходится использовать другие варианты. Со статичными сайтами справляется утилита командной строки wget или более продвинутая версия wget2.

Из более современных альтернатив можно назвать Offline Explorer (платная), HTTrack (бесплатная, исходный код) и Website Ripper Copier (WRC). Ещё на Хабре рекомендовали вспомогательный поисковый модуль msfcrawler для хакерской программы Metasploit.

Модуль msfcrawler для Metasploit

Модуль msfcrawler для Metasploit

В комментариях подсказали ещё программку Akeeba Solo.

Локальные копии отдельных страниц

Стандартный Firefox без плагинов и расширений предлагает три варианта сохранения: 1) веб-страницу полностью, 2) только HTML или 3) экспорт TXT.

Вариант «Веб-страница полностью» создаёт папку с сотней файлов: картинками, скриптами и проч. Потом эту офлайновую копию можно открыть в браузере и она нормально отобразится, неотличимо от оригинала. Это нормальный вариант, но у него есть несколько недостатков:

  1. Слишком большое количество файлов. Такие копии страниц неудобно посылать по почте или в мессенджере.

  2. Отсутствие сжатия. Файлы занимают много места на диске:

    Главная Хабра сохраняется в 112 файлов общим размером 16 892 КБ

    Главная Хабра сохраняется в 112 файлов общим размером 16 892 КБ

  3. Для просмотра нужен браузер. Это не то чтобы недостаток, потому что для просмотра любого формата файлов нужна какая-то внешняя программа, даже для TXT нужен редактор, хотя бы утилита командной строки.

Но хотя бы первые два недостатка можно устранить. Мы хотим сохранять веб-страницы в один файл меньшего размера. Какие есть варианты?

Начнём с PDF, это самый «портативный» формат, который идеально сохраняет внешний вид страницы и одинаково отображается на всех устройствах, которые его поддерживают. Для сохранения страницы в PDF из браузера есть расширение FireShot, оно нормально работает в бесплатной версии — сохраняет скриншоты и PDF всей страницы целиком.

Расширение FireShot умеет сохранять в PDF. Главная страница Хабра ужалась до 3 534 КБ

Расширение FireShot умеет сохранять в PDF. Главная страница Хабра ужалась до 3 534 КБ

Специально для архивирования веб-страниц и сайтов разработан архивный формат WARC. Вышеупомянутый wget поддерживает его, как и другие программы для скачивания сайтов и вспомогательные инструменты. Для архивирования маленьких сайтов разработан бот ArchiveBot, а для архивирования отдельных страниц есть archive.is и Wayback Machine.

Процесс архивирования главной страницы Хабра на Wayback Machine

Процесс архивирования главной страницы Хабра на Wayback Machine

Другие популярные форматы для статичного хранения веб-страниц — MHTML, MAFF, SingleFile и SingleFileZ (ZIP-версия SingleFile).

Например, SingleFile можно установить как расширение к браузеру Chrome, Edge, Firefox, Safari — и сохранять страницы в одном файле со встроенными картинками, вот как это выглядит:

Утилита SingleFile CLI работает из командной строки без установки (нужен только установленный Chrome/Chromium и Deno). Достаточно скачать исполняемый файл и просто запустить его:

single-file <url> [output] [options ...]

Если Chromium установлен в нестандартной папке, следует указать её в опции --browser-executable-path при запуске:

На выходе получаем один файл размером около 10 МБ со всеми встроенными изображениями:

Как и wget, утилита тоже умеет сохранять одной командой много страниц по шаблону или из списка URL'ов:

single-file --urls-file=list-urls.txt

А также может пройтись по всем внутренним ссылкам и сохранить их тоже:

single-file https://www.wikipedia.org --crawl-links=true --crawl-inner-links-only=true --crawl-max-depth=1 --crawl-rewrite-rule="^(.*)\\?.*$ $1"

Кстати, такой формат удобен и для хостинга веб-сайтов, когда вы не хотите возиться с сотнями отдельных файлов для каждой страницы.

Но у SingleFile есть неприятный недостаток: некоторые страницы при упаковке в один файл раздуваются до невообразимых размеров. Например, вот эта 0,6-мегабайтная html-страница PaintsUndo при сохранении в один файл занимает 485 МБ. Такое часто происходит с постами Medium и другими сайтами. Такое происходит из-за того, что SingleFile включает в файл кучу шрифтов, JS, картинок, виджетов, иконок и прочего, ещё и преобразуя их в формат Base64 для файла HTML.

Что особенно обидно, посетитель оригинальной веб-страницы вовсе не обязан скачивать эти 485 МБ — он скачивает только те картинки, которые появляются на экране. Но в архивную версию приходится включать всё.

Формат Gwtar

В 2026 году известный разработчик и блогер Гвен Бранвен представил новый экспериментальный формат для архивирования HTML-страниц под названием Gwtar (произносится как guitar). Он был благосклонно принят публикой, потому что устраняет недостатки SinbgleFile благодаря нескольким интересным хакам.

Gwtar сохраняет веб-страницы в одиночный самодостаточный (статичный) и эффективный HTML-файл, который открывается в браузере. Это достигается с помощью скрипта в заголовке, который делает HTTP-запросы range (запрос точного диапазона байтов внутри URL). HTTP-запросы range применяются для различных полезных функций. Например, локальный клиент может запрашивать из серверной БД только нужный фрагмент информации, не скачивая всю базу на терабайт.

«Самодостаточный» HTML означает, что в него включены все ресурсы. При хранении на диске не требуется никаких дополнительных файлов.

И главное. Формат поддерживает эффективную ленивую загрузку ресурсов в браузер по мере необходимости, в отличие от SingleFile. По словам автора, ни один известный формат до сих пор не удовлетворял всем трём вышеупомянутым критериям (самодостаточный, одиночный, эффективный).

MHTML, MAFF, SingleFile и SingleFileZ — статичные и одиночные форматы, но не эффективные, а WARC и WACZ — статичные и эффективные, но не одиночные, потому что для их рендеринга требуется сложный софт типа WebRecorde и Replay Webpage.

Таким образом, .gwtar.html — первый в своём роде формат, уникальный для архивирования.

Например, вы открываете статичный HTML размером 1 ГБ с кучей встроенных ресурсов, но они не будут загружаться в браузере, пока пользователь не нажмёт на кнопку воспроизведения в плеере. Это актуально для хостинга архивных страниц и сайтов, если вы раздаёте их пользователям со своего сервера.

Вот пример Gwtar:

Это самораспаковывающийся файл с заголовком HTML+JavaScript, за которым следует tarball оригинального HTML и ресурсов. Скрипт с командой window.stop() в заголовке HTML-файла не даёт браузеру загружать остальную часть файла, он загружает только оригинальный маленький HTML, а затем перехватывает запросы и превращает их в запросы range к остальной части файла с tarball.

Метод window.stop() поддерживается всеми современными браузерами.

Скрипт в заголовке хранит JSON-словарь файлов/размеров/типов/SHA-256-хэшей реального HTML (с именем "0"), за которым следуют все его ресурсы (basename-asset-N.ext). В заголовке всегда есть HTML-файл и как минимум один ресурс. Все ресурсы хранятся в архиве сразу после заголовка.

<script>
let assets = {
    "0": {
        "size": 130673,
        "content-type": "text/html",
        "basename": "1999-03-17-brianmoriarty-whoburiedpaul",
        "hash": "79111815b482504d79428f5cea329741348060fd2d943da933288595e2c9e969"
    },
    "1999-03-17-brianmoriarty-whoburiedpaul-asset-1.js": {
        "size": 15127,
        "content-type": "application/x-javascript",
        "hash": "d739d46b0f3b188cd409c97ab47964ea3a009cce9d08a50b763fdb958e39b822"
    },
    "1999-03-17-brianmoriarty-whoburiedpaul-asset-2.js": {
        "size": 27146,
        "content-type": "text/javascript",
        "hash": "dd29affcde5ff55d96613aa7ac55fa56cc8eeda20d6aef90185b75332e2c3cde"
    },
    ...
}
</script>

В конце скрипта вызывается window.stop():

Таким образом, обычный браузер загружает то, что кажется обычным HTML-файлом, и все ресурсы загружаются только по мере необходимости. Получается, что в статическую веб-страницу можно встроить что угодно — например, медиафайлы размером в гигабайты — но они не будут передаваться клиенту до тех пор, пока это не станет необходимо, даже несмотря на то, что сервер видит один большой HTML-файл, который обрабатывается как обычно.

Gwtar похож на файл-полиглот, поскольку содержит внутри файлы разных форматов: .html, .tar и, возможно, .par2.

Поскольку файл самодостаточный, он автоматически совместим с будущими версиями браузеров. Gwtar позволяет легко и надёжно архивировать даже самые большие HTML-страницы, сохраняя их при этом удобными для чтения. Скрипт deconstruct_singlefile.php разбирает файлы SingleFile и генерирует из них Gwtar'ы. Можно использовать на своё усмотрение. Пример использования:

php ./static/build/deconstruct_singlefile.php --create-gwtar --add-fec-data \
    2010-02-brianmoriarty-thesecretofpsalm46.html

Эта команда берёт оригинальный файл 2010-02-brianmoriarty-thesecretofpsalm46.html и конвертирует его в 2010-02-brianmoriarty-thesecretofpsalm46.gwtar.html.

Вот такой интересный хак для эффективного хранения контента в одном файле, но который загружается клиенту не целиком, а по частям. Возможно, для кого-то формат Gwtar окажется полезным.


Если рассматривать «ПК для Апокалипсиса», с которого информация загружается только локально, то Gwtar — не самый лучший вариант, потому что браузеру запрещено делать JS-запросы к HTML из-за безопасности. И он откажется открывать такой файл локально:

Такая же проблема у формата SingleFileZ со сжатием

Такая же проблема у формата SingleFileZ со сжатием

Но файл можно легко конвертировать обратно в единый HTML со встроенными ресурсами без JS:

perl -ne'print $_ if $x; $x=1 if /<!-- GWTAR END/' < 2010-02-brianmoriarty-thesecretofpsalm46.gwtar.html | tar --extract

А вот при хостинге и раздаче файлов по сети формат Gwtar действительно эффективнее, потому что экономит трафик и память, а также уменьшает время первоначальной загрузки HTML. Кроме того, внутри файла можно эффективно хранить бинарные активы.

Если же ничего раздавать не планируется, то для личного архива удобнее хранить HTML-страницы в формате SingleFile, тогда они сразу открываются локально.

© 2026 ООО «МТ ФИНАНС»