Piping ChunkとPiping UIの違い
発端
@yuta0381
Piping ChunkとPiping UIの違いが分からなくなった
てっきりUIの以前の名称がChunkだったのだとずっと思ってたけど、リポジトリが別で存在しているのを発見した
両者の目的から来る違い
Piping ChunkとPiping UIは目的が異なっている。
Piping Chunkの目的は多くのストリーミング非対応デバイスへのストリーミング対応
Piping Chunkの目的はHTTPサーバーがTransfer-Encoding: chunkedに対応していないときや現状のブラウザのHTTPクライアントが任意のストリームをPOSTできない問題を解決する。
Transfer-Encoding: chunkedに非対応のデプロイ先は存在している。
具体的はHeroku、UnuboはTransfer-Encoding: chunkedに非対応。
任意のストリームのPOSTに関しては「ブラウザのJavaScriptでPOSTリクエストのBodyをストリーミングしたいが、Chromeも未対応みたい」。
データストリームを一定区切りチャンクに分けてPiping Server経由で送信し、それをチャンクごとに受信する実装になっている。そのためPiping Chunkの送受信をcurlコマンドで再現しようとするのをいちいち毎回ターミナルでやるような感じではない。Piping Chunkと互換性のある専用CLIが必要になることが想定される。
Piping UIの目的は純粋にPiping Serverを使うこと
Piping UIの目的はcurlコマンドなどのCLIとの親和性を保ちつつ、「Piping Serverの質素なWeb UI」の機能的/UI/UX的な上位互換を提供すること。
その完全な互換性のため、送信者がcurlコマンドを使って送ったものを受信者がPiping UIを受け取ることができるし、またその逆に送信者がPiping UIを使って送り、受信者がコマンドで受け取ることもできる。
コマンドに限らず、
「Piping Serverの質素なWeb UI」
「Microsoft FlowでAndroid/iPhoneからPiping Server経由でテキストを転送する」など純粋なPiping Serverの利用をする。
などの純粋なPiping Serverの利用と相性が良い。
またPiping UIのコマンドとの互換性の高さのおかげでE2E暗号化もやりやすくなる。
コマンドではgpgコマンドで、以下のようにすごくシンプルにE2E暗号化での転送が行える。
送信:
$ export GPG_TTY=$(tty)
$ echo 'hello!' | gpg -c | curl -T - https://ppng.io/mypath
受信:
$ curl https://ppng.io/mypath | gpg
Piping UIはこの安全性をgpgコマンドを使わない一般ユーザーも手軽にブラウザ上で使えるようにする。上記のgpgコマンドと互換性がある暗号化をブラウザ上で実現して。(OpenPGP.jsの力)