概要
2019年08月下旬に、不正操作等のエラーが頻発するお問い合わせが増えてきました。
調査により、Android版の Chromeアプリのライトモード(旧:データセーバー)を有効にしていると、不具合が発生することが判明しました。
ここでは、不具合の原因と、その対策を記しています。
不具合発生箇所の詳細
- GETリクエスト で 情報の更新処理を行っている
- リクエストが3秒以上かかる場合がある
ライトモード(データセーバー)について
ライトモードとは、Googleサーバーにて、画像の圧縮やCSSやJavaScriptの圧縮をすることで、データ通信量を少なくすることができるモードです。
Chromeアプリの設定から「ライトモード」を有効にした上で、以下条件のいずれかを満たした場合に、ライトモードが有効になります。
■有効になる条件
- 2G以下の通信速度でページを表示した
- Googleサーバーがページを表示するのに、5秒以上かかると判断したページを表示した
不正操作エラーが頻発した理由
ライトモードが有効な場合、端末からの1回のGETリクエストに対して、サーバー側に3回リクエスト(うち、2回がGooleサーバーからのアクセス)が来ていたのが原因でした。
2回目以降のものが連打扱いとなり、不正操作エラーとなっていました。
なお、POSTリクエストの場合は、上記の問題は発生していませんでした。
対応策について
方法1: 処理時間がかる処理をGETリクエストで呼び出している箇所をPOSTリクエストに置き換える
※そもそもGETリクエストは、情報の更新に使うべきではないのでないことが望ましいですが…
方法2:リクエストにかかる時間を短くする
1リクエストあたりの時間が短ければ、「ライトモード」が機能しないので、処理時間が短くなるよう改善する
効果が見られなかったもの
HTMLに変換を許可しないメタタグを追加
変換はされなくなったものの、リクエスト数は変わりませんでした。
<meta http-equiv="Cache-Control" content="no-transform">
今後について
固有の環境に起因した問題かの切り分けが完全にはできていないので、引き続き調査を行っていきます。
また、不具合箇所を逐一直していくような、場当たり的な対応ではない対応方法についても、引き続き調査していきます。
本件について、ご存知な事があればぜひコメントから教えて頂きたいです。