ブラウザのJavaScriptでPOSTリクエストのBodyをストリーミングしたいが、Chromeも未対応みたい
#Streams_API #JavaScript #ブラウザ #Chrome #HTTP #Streams_API #WebブラウザのJavaScript
追記: リンクをまとめた場所: 「リンク集: Webブラウザのfetch()でReadableStreamをアップロードする機能の情報をまとめたい場所」
追記Chrome Devまで対応: 「Webブラウザ上で純粋なHTTPだけで単方向リアルタイム通信を可能にするHTTPのストリーミングアップロードが遂にやってくる」
hr.icon
もと:Uploading a Request made from a ReadableStream body by yutakahirano · Pull Request #425 · whatwg/fetch
fetch(, {body})または、new Request({body})のbodyでReadableStreamを渡したいが、ブラウザみたいの様子。
MDNのRequest()のドキュメント みると、ReadableStream渡せるぽく書いてあるが、試しても[object ReadableStream]がPOSTされてしまった。
https://gyazo.com/d65d70fdfc61c292d42454e8815fc282
試し試しのコードだが、ないよりマシだと思うので、貼っておく。今後ブラウザが対応して動いてくれたり、コードの間違いがあって、直したらうまくいったりすることを期待したい。
試行錯誤中のNipp
fetchに限らず、試した限りXMLHttpRequestでもできない。
動機
Piping ServerとかTrans ServerとかPOST/PUTのボディをストリーミングして使うサーバーのクライアント開発で使いたい。暗号化のストリーミングなどを挟んだりしたい。エンドツーエンド暗号化ができれば、信用できないサーバーでも安心して使えるようになる。Webで動けばAndroid/iOS/Windows/macOS/Linuxなども一気に対応できて、PWAにすればアプリぽくなるし良さそう。
将来的には
将来的には、この機能が搭載される見込みはとてもありそう。
ブラウザようのStreams APIの仕様の中の例にforRemote.pipeTo(httpRequestBody)というものがあって、いかにもPOSTをストリーミングしそうなコード。
https://streams.spec.whatwg.org/
搭載されても、JSのエンジンが新しくないと動かないので、使うときは限定的になりそう。
ElectronなどでV8のバージョンが固定できるときとか
Monacaとか(多分Webview的なもののバージョン固定できそう)
Polyfillが作れればいいのだが、それが作れればfetch()のこの仕様を待つ必要すらなくなってくる。
ChromiumのIssue
おそらく以下はChromiumに上がっているIssue。
動いていると思われるのでサポートされるのが楽しみ。
「Wed, Dec 5, 2018, 9:44 PM GMT+9」のコメントからあんまり動いていない様子。DuplicateなIssueがmergedされるコメントがいくつか並んでいる。duplicateすることが多いってことは他の人の需要があるのだと思う。
元はこのStackOverflow:
この対応ができているか確認するNipp
fetch()のPOSTでbodyをReadableStreamにできるか確認するNipp