Windows用のIPFS惑星間ファイルシステムでサイトをホストします

IPFSで簡単なサイトをホストするという私の実験が始まってからしばらく経ちました。 Windows用のIPFSクライアントを起動しましたが、以前の記事「IPFS惑星間ファイルシステムでのサイトの公開」を補足するものができました。


  1. Windows XPコンソールでc utf-8問題を解決します。
  2. 自分のページ404
  3. 異なるURLからの正しいサイトの読み込み

思い出させてください: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」またはドメインの代わりに、アドレスを次のようにすることができます。


  1. localhost:8080
  2. 127.0.0.1:8080
  3. [::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の修正をリリースしています :


  1. punycodeと互換性があります。
  2. すべてのGETリクエストのEtag。
  3. Windowsの隠しファイルの正しい検出。

ソース


  1. ipfsコマンドリファレンス
  2. ロギングの文書化?
  3. Windowsでgrep? 簡単!
  4. grepとは何ですか?
  5. Windows用のGrep
  6. アプリケーションキャッシュの使用
  7. HTML5アプリケーションの基本的なキャッシュトラップ
  8. chcp 65001および.batファイル


Source: https://habr.com/ru/post/J325176/


All Articles