Хостим сайт в межпланетной файловой системе IPFS под Windows

InterPlanetary File System — это новая децентрализованная сеть обмена файлами (HTTP-сервер, Content Delivery Network). О ней я рассказывал в статье «Межпланетная файловая система IPFS».


Прошло некоторое время от начала моих экспериментов с хостингом простых сайтов в IPFS. Запустил я свой IPFS клиент под Windows и у меня есть теперь что дополнить к предыдущей статье «Публикуем сайт в межпланетной файловой системе IPFS»


image


Содержание
  1. Перед стартом
  2. Запуск IPFS под Windows
    1. Для Windows 7 и новее
    2. Для Windows XP
  3. 404 Not Found (manifest.appcache)
  4. URL Относительные пути к ресурсам
  5. IPFS как зеркало
  6. Заключение
  7. Источники

Перед стартом


Необходимо создать ярлык на ipfs.cmd файл в свойствах которого поменять шрифт на Lucida Console. Это даст возможность переключиться на UTF-8.


Запуск IPFS под Windows


Хочется видеть какие запросы приходят к нашему клиенту. Используем командный файл. Он настроит вывод консоли, переменные и при помощи findstr или grep отфильтрует вывод IPFS клиента.


Для Windows 7 и новее


Файл: ipfs.cmd


rem Переключаем на UTF-8 (>= Windows 7)
chcp 65001

rem Выключаем цветной лог который не работает в консоли Windows
SET IPFS_LOGGING_FMT=nocolor

rem |-D - включает режим DEBUG в котором в консоль выводится информация о работе клиента
rem |listening - покажет открытые порты
rem |namesys - покажет процесс разрешения домена
rem |path - покажет конечный путь куда обращается клиент
ipfs.exe daemon -D 2>&1|findstr "listening namesys path" 2>nul
pause

Для Windows XP


В Windows XP есть особенность что попытавшись переключить на utf-8 в командном файле выполнение сразу завершается. Методом проб и ошибок мне удалось переключить кодировку в командном файле.


Решение: start "utf-8" /B cmd /C chcp 65001


Нам понадобится Grep for Windows. Findstr вырубается при включенном UTF-8 от первой строки в которой присутсвуют символы кирилицы. Ну и отображает за место них точки.


Файл: ipfs.cmd


rem Переключаем на UTF-8 (Windows XP)
start "utf-8" /B cmd /C chcp 65001 

rem Выключаем цветной лог который не работает в консоли Windows
SET IPFS_LOGGING_FMT=nocolor

rem |-D - включает режим DEBUG в котором в консоль выводится информация о работе клиента
rem |listening - покажет открытые порты
rem |namesys - покажет процесс разрешения домена
rem |path - покажет конечный путь куда обращается клиент
ipfs.exe daemon -D 2>&1|grep "listening\|namesys\|path" 2>nul
pause

404 Not Found (manifest.appcache)


В IPFS нет настраиваемой страницы 404. Мы её можем имитировать при помощи appcache.


Файл: manifest.appcache


CACHE MANIFEST
# 2017-03-29 v1.0

# Записываем в кеш 404.html
CACHE:
404.html

# Назначаем её ответом в случае получения 404 от сервера
FALLBACK:
/ 404.html

# Разрешаем всё остальное грузить с сервера
NETWORK:
*

При использовании appcache нельзя устанавливать заголовок Expiries для страниц на которых объявлен manifest.appcache и ресурсов указанных в манифесте в разделе CACHE. При обновлении файла manifest.appcache Firefox «обновляет» файлы указанные в манифесте из собственного кэша чем оставит старые файлы с обновлённым манифестом.


На страницах нельзя указывать в теге base который ведёт на другой домен. Firefox дополняет путь к файлу манифеста значением свойства href тега base и блокирует загрузку manifest.appcache если он на другом домене или протоколе (http → https).


Другие нюансы: «Основные ловушки при использовании кэша в HTML5-приложениях»


URL Относительные пути к ресурсам


Внешние ресурсы страницы должны быть указаны относительными путями. Содержимое сайта в IPFS может быть загружено с множества разных url разной степени вложенности.


http://домен/страница.html
http://ipfs.io/ipns/домен/страница.html
http://ipfs.io/ipns/мультихеш_публичного_ключа/страница.html
http://ipfs.io/ipfs/мультихеш_каталога/страница.html
и даже так
http://ipfs.io/ipfs/мультихеш_файла

Для последнего случая лучше включать css и js в страницу. Либо включить скрипт который обработает данный случай и выставит правильные ссылки на ресурсы и страницы.


Также вместо «ipfs.io» или домена в адресе может быть:


  1. localhost:8080
  2. 127.0.0.1:8080
  3. [::1]:8080
    и так далее.

В итоге у нас получится такая страница.


Файл: index.html





    
        
        Мой сайт
        
    
    
        
        magnet converter
        gravity

        All projects

        
        
    












IPFS как зеркало


Не обязательно использовать IPFS клиент как HTTP-сервер. Можно использовать любой HTTP-сервер который будет отдавать содержимое сайта если у посетителя не установлен IPFS клиент. В IPFS можно загрузить зеркало этого сайта.


Заключение


Рассказал что вспомнил. Надеюсь это не мало. Есть идея по реализации дедупликации и ускорения классического интернета за счёт IPFS. Надеюсь рассказать об этом в будущих статьях с рабочими примерами.


Источники


  1. ipfs command reference
  2. Documentaion for logging?
  3. grep в Windows? Легко!
  4. Что такое grep и с чем его едят
  5. Grep for Windows
  6. Using the application cache
  7. Основные ловушки при использовании кэша в HTML5-приложениях

Комментарии (0)

© Habrahabr.ru