- PVSM.RU - https://www.pvsm.ru -

Готовимся к отключению. Эффективные форматы для упаковки и раздачи HTML-страниц

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

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

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

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

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

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

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

Готовимся к отключению. Эффективные форматы для упаковки и раздачи HTML-страниц - 1

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

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

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

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

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

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

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

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

  • и др.

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

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

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

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

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

Модуль msfcrawler для Metasploit

Модуль msfcrawler [9] для Metasploit

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

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

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

Готовимся к отключению. Эффективные форматы для упаковки и раздачи HTML-страниц - 3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Готовимся к отключению. Эффективные форматы для упаковки и раздачи HTML-страниц - 7

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

Готовимся к отключению. Эффективные форматы для упаковки и раздачи HTML-страниц - 8

Как и 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"

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

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

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

Формат Gwtar

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

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

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

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

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

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

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

Вот пример Gwtar:

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

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

Скрипт в заголовке [37] хранит 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-страниц - 9

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

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

Поскольку файл самодостаточный, он автоматически совместим с будущими версиями браузеров. Gwtar позволяет легко и надёжно архивировать даже самые большие HTML-страницы, сохраняя их при этом удобными для чтения. Скрипт deconstruct_singlefile.php [39] разбирает файлы 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

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

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

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

Автор: alizar

Источник [40]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/arhivirovanie/450102

Ссылки в тексте:

[1] Project N.O.M.A.D.: https://github.com/Crosstalk-Solutions/project-nomad

[2] Teleport Pro: https://ru.wikipedia.org/wiki/Teleport_Pro

[3] wget: https://www.gnu.org/software/wget/

[4] wget2: https://gitlab.com/gnuwget/wget2

[5] Offline Explorer: https://metaproducts.com/products/offline-explorer?

[6] HTTrack: https://www.httrack.com/

[7] исходный код: https://github.com/xroche/httrack

[8] Website Ripper Copier: http://websiterippercopier.com/

[9] msfcrawler: https://www.rapid7.com/db/modules/auxiliary/crawler/msfcrawler/

[10] Akeeba Solo: https://www.akeeba.com/products/akeeba-solo.html

[11] расширение FireShot: https://getfireshot.com/

[12] 3 534 КБ: https://github.com/alizar/save_pdf/blob/main/FireShot%20Capture%20051%20-%20%D0%92%D1%81%D0%B5%20%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8%20%D0%BF%D0%BE%D0%B4%D1%80%D1%8F%D0%B4%20_%20%D0%A5%D0%B0%D0%B1%D1%80%20-%20%5Bhabr.com%5D.pdf

[13] WARC: https://wiki.archiveteam.org/index.php?title=The_WARC_Ecosystem

[14] программы для скачивания сайтов и вспомогательные инструменты: https://dhamaniasad.github.io/WARCTools/

[15] ArchiveBot: http://archivebot.com/

[16] archive.is: https://archive.is/

[17] Wayback Machine: https://web.archive.org/

[18] MHTML: https://en.wikipedia.org/wiki/MHTML

[19] MAFF: https://en.wikipedia.org/wiki/Mozilla_Archive_Format

[20] SingleFile: https://github.com/gildas-lormeau/SingleFile/

[21] SingleFileZ: https://gildas-lormeau.github.io/Polyglot-HTML-ZIP-PNG/SUMMARY.html

[22] SingleFile: https://www.getsinglefile.com/

[23] SingleFile CLI: https://github.com/gildas-lormeau/single-file-cli

[24] Deno: https://deno.com/

[25] исполняемый файл: https://github.com/gildas-lormeau/single-file-cli/releases

[26] хостинга: https://www.reg.ru/?rlink=reflink-717

[27] 0,6-мегабайтная html-страница PaintsUndo: https://lllyasviel.github.io/pages/paints_undo/

[28] Гвен Бранвен: https://gwern.net/

[29] Gwtar: https://gwern.net/gwtar

[30] благосклонно принят публикой: https://news.ycombinator.com/item?id=46694618

[31] WARC: https://en.wikipedia.org/wiki/WARC_(file_format)

[32] WACZ: https://specs.webrecorder.net/wacz/1.1.1/

[33] WebRecorde: https://webrecorder.net/

[34] Replay Webpage: https://replayweb.page/

[35] 2010-02-brianmoriarty-thesecretofpsalm46.gwtar.html: https://gwern.net/doc/philosophy/religion/2010-02-brianmoriarty-thesecretofpsalm46.gwtar.html

[36] всеми современными браузерами: https://caniuse.com/mdn-api_window_stop

[37] Скрипт в заголовке: https://gwern.net/static/build/gwtar.js

[38] полиглот: https://%D1%84%D0%B0%D0%B9%D0%BB-%D0%BF%D0%BE%D0%BB%D0%B8%D0%B3%D0%BB%D0%BE%D1%82

[39] deconstruct_singlefile.php: https://gwern.net/static/build/deconstruct_singlefile.php

[40] Источник: https://habr.com/ru/companies/ruvds/articles/1020916/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1020916