iOS 11, macOS Hight Sierra で The operation couldn't be completed. Protocol error が出る場合の対処


サイト構成

WordPress のサイトで、Apache の上段に ALB (ELB も同様?) を置く構成です。

(ELB ですが ALB です)

問題

構成自体は結構ありがちな構成になりそうですが、ALB にて SSL を有効にすると iOS 11, macOS Hight Sierra の Safari でのみ一部画像が読み込めなかったりそもそもページが表示されなかったりしました。
Chrome, Android, iOS 10 等の他のブラウザでは特に問題がありませんでした。

macOS Safari の場合は

"The operation couldn't be completed. Protocol error" (NSPOSIXErrorDomain:100)

iOS 11 の場合はインスペクタ経由で確認すると同様のエラーが確認できました。

解決方法

調べてみるとどうやら Apache から出力された Upgrade header がプロキシ経由でブラウザに届くと失敗したりコネクションを破棄したりしてしまうようです。

参考
https://help.poralix.com/articles/iphone-does-not-open-https-site-safari-nsposixerrordomain

解決方法としては、Upgrade header を送らないようにすればいいだけのようなので、ALB の場合 AWS Console の属性に HTTP/2 という項目があるのでそこを無効にすると解決しました。