事象
PHPで、JSON文字列を返すAPI用のテストを書いたけどなぜか動かない。
そこで画面にレスポンスを表示してみたら・・・
_人人人人人人人人人人_
> 突然のキリル文字 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^ ̄
キリル文字:Й ←こんなの
検証
確か、バイナリデータをコンソールに表示しようとすると、こんな文字化けっぽい現象を起こしていたはず・・・
しかし、なぜバイナリになるのか分からない。
デバッグしてもデバッグしても、分からない。
ふとレスポンスヘッダを眺めてみるとこんな一文を発見。
Content-Encoding: gzip
_人人人人人人人_
> 突然のgzip <
 ̄Y^Y^Y^Y^Y^Y ̄
検証2
さらに、リクエストヘッダ(自分でテストに書いた)も眺めてみると、こんな一文を発見。
Accept-Encoding:gzip, deflate, sdch
なるほどなるほど。
gzipで寄越していいよってリクエストをした結果、サーバ側でgzipで返してあげたってことだね。
調べてみると、そういう仕様があるらしい。
参考:Apacheのmod_deflateでコンテンツを圧縮してサイトを高速化する方法
結論
リクエストヘッダから
Accept-Encoding:gzip, deflate, sdch
を削除したら、文字列で結果を受け取れました。
mod_deflateを導入した覚えもないんだけど、テスト環境だしまぁいっか。
反省
- ブラウザのログからのコピペをリクエストヘッダに設定していた。よく見よう。
- デバッグの前に、今分かる情報をよく見よう。