HTML5ビデオをcontent-encoding: gzip してはいけない


HTML5 にはvideo タグがあり、いくつかの形式のビデオをブラウザで再生させることができる。

私のデプロイパイプラインでは、静的なファイルはzopfli という高圧縮を実現できるgzip エンコーダを通して、圧縮結果が圧縮前よりも小さければ、事前に圧縮したファイルをストレージ(AWS S3)に配置する構成になっていた。

mp4 (H.264) 形式とWebM (VP9)のビデオを上記デプロイ方法で配置したところ、iOS 13.5 Safari およびWindows 10 Chrome 83.0.4103.61 にて再生が行えない状況が発生した。特に、Windows 10のChrome 83.0.4103.61においては、「コンソール」に以下表示が出力されていることを確認した。

net::ERR_CONTENT_DECODING_FAILED

一方、Firefox 77.0 では問題なく再生できていた。

結果として、上記ビデオを content-encoding: gzip で送らなければ、全環境で再生できることが検証された。私のようにビデオファイルを事前にgzip する場合は少ないと思うが、ちょっとハマるので注意が必要。