..

Поддержка IPFS

03 Dec 2024

Прошлая версия моего блога уже поддерживала IPFS, но движок сменился, так что и поддержку нужно было обновить.

Что такое IPFS? Если кратко, то это распределенная сеть для распространения файлов, в которой адресация происходит не по произвольному URL, а адрес определяется содержимым. То есть, если загрузить в эту сеть файл с содержимым “Hello IPFS!”, то адрес у него будет ipfs://QmYWAifyw2V5dEq7c5GgdSPffeKoYXQZggnYzw5RbXpig4. И сколько бы пользователей ни загрузили этот файл, адрес будет тем же.

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

Если файл становится популярным, то его начинают распространять большее число нод. Для того, чтобы система работала хорошо, нужно установить себе локальную ноду этой сети. Самый простой способ открыть страницу из сети IPFS - это установить расширение для браузера - IPFS Companion

А какое отношение мой блог на jekyll имеет к IPFS? Вроде, все открывается, как обычно. Верно, но есть нюанс: если посмотреть заголовки, которые отправляет каждая страница, то можно заметить среди них “X-Ipfs-Path”, в которой передается IPFS адрес данной страницы.

$ curl --head https://sergei.udalovs.ru/

HTTP/2 200
alt-svc: h3=":443"; ma=2592000
content-type: text/html
date: Tue, 03 Dec 2024 09:18:19 GMT
last-modified: Tue, 03 Dec 2024 09:02:18 GMT
server: Caddy
x-ipfs-path: /ipfs/QmYvD9j3abC7koYs7XBmvycqwE9MUssvmuFgs8meS46qgx/
content-length: 7336

Если установлено расширение IPFS, то оно этот заголовок увидит и переадресует тебя на страницу в сети IPFS, примерно сюда:

http://bafybeiapzbnno4eshpwyqnvgjoaaa2r3s…wdulakug4j5ornri.ipfs.localhost:8080/

Такой адрес продолжит работать, даже если основной сайт перестал работать или удален. Так как сайт статический, он весь выгружен в IPFS и без изменений доступен там. Однако, чтобы получить обновления, нужно снова зайти на главную: https://sergei.udalovs.ru