IPFSで簡単なサイトをホストするという私の実験が始まってからしばらく経ちました。 Windows用のIPFSクライアントを起動しましたが、以前の記事「IPFS惑星間ファイルシステムでのサイトの公開」を補足するものができました。
思い出させてください:InterPlanetary File Systemは、新しい分散ファイル共有ネットワーク(HTTPサーバー、 コンテンツ配信ネットワーク )です。 それについての話は、記事「IPFS Interplanetary File System」で始めました。
始める前に
Lucida Consoleのフォントを変更するプロパティでipfs.cmdファイルへのショートカットを作成する必要があります。 これにより、UTF-8に切り替えることができます。
WindowsでIPFSを実行する
クライアントにどのようなリクエストが来るかを知りたい。 バッチファイルを使用します。 コンソール出力、変数を設定し、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
しかし、チームはプログラム中に解決する必要があることが判明しました。 そして、コマンドの最後にエンコードを返す必要があります。
切り替え方法を「発見」した後、 他の解決策を見つけました。
chcp 65001 | ipfs daemon & chcp 1251
したがって、utfs-8への切り替えは、ipfsの実行中に実行されます。 また、ipfsが終了すると、エンコーディングはwin1251に切り替わり、batファイルは引き続き機能します。
Windows用のGrepが必要です。 Findstrは、キリル文字が存在する最初の行からUTF-8がオンになったときに切り捨てられます。 まあ、それは彼らの場所のポイントを表示します。
ファイル:ipfs.cmd
rem Windows SET IPFS_LOGGING_FMT=nocolor rem | UTF-8 (Windows XP) rem |-D - DEBUG rem |listening - rem |namesys - rem |path - chcp 65001|ipfs.exe daemon -D 2>&1|grep "listening\|namesys\|path" 2>nul & chcp 1251 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を使用する場合、manifest.appcacheが宣言されているページおよびCACHEセクションのマニフェストで指定されているリソースにExpiriesヘッダーを設定できません。 manifest.appcacheファイルを更新すると、Firefoxはマニフェストで指定されたファイルを独自のキャッシュから「更新」します。これにより、更新されたマニフェストが古いファイルに残ります。
別のドメインにつながるベース<base href="https:///" />
で指定できないページ。 Firefoxは、ベースタグのhrefプロパティの値を使用してマニフェストファイルへのパスを完成させ、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」またはドメインの代わりに、アドレスを次のようにすることができます。
-
localhost:8080
-
127.0.0.1:8080
-
[::1]:8080
などなど。
その結果、このようなページが表示されます。
ファイル:index.html
<!doctype html> <!-- manifest --> <html manifest="manifest.appcache"> <head> <meta charset="utf-8" /> <title> </title> <script> if (window.location.hash.substr(1,8) == "magnet:?"){ var magnet = document.location.hash.substr(9) // setTimeout(function() {window.location.replace("magnet-converter/#magnet:?"+magnet);}, 0); } </script> </head> <body> <!-- href --> <a href="magnet-converter/">magnet converter</a> <a href="gravity/gravity.svg">gravity</a> <a href="https://github.com/ivan386?tab=repositories">All projects</a> <!-- src --> <img src="imgs/stars-static.svg" style="display: block; width: 100%" /> </body> </html>
ミラーのようなIPFS
IPFSクライアントをHTTPサーバーとして使用する必要はありません。 訪問者がIPFSクライアントを持っていない場合、サイトのコンテンツを提供する任意のHTTPサーバーを使用できます。 IPFSでは、このサイトのミラーをダウンロードできます。
おわりに
彼は私に彼が覚えていたことを話した。 これで十分ではないことを願っています。 IPFSを介した従来のインターネットの重複排除と高速化を実装するためのアイデアがあります。 これについては、今後の記事で実際の例を使用して説明したいと考えています。
私のIPFSクライアントはGitHubの修正をリリースしています :
- punycodeと互換性があります。
- すべてのGETリクエストのEtag。
- Windowsの隠しファイルの正しい検出。