2012/09/22

AmazonおまかせリンクWidgetでサムネイルが表示されるようになった件

以前「AmazonおまかせリンクWidgetでサムネイルが表示されない理由」で解説した通り、Google Chromeで「Amazonおまかせリンク」Widgetを表示するとサムネイルが表示されませんでした。


原因は、Amazonから送られるHTMLファイルのContent-Lengthが誤っていることです。

Amazonのサーバから送出されるデータのエンコーディングはCP932(概ねSHIFT_JIS)です。また、Content-Type:のcharsetはShift_JISとなっています。しかし、Content-Lengthには送出されたコンテンツをUTF-8として計算した値が書かれています。これがコンテンツの実データサイズとContent-Lengthとの不整合です。

想像に過ぎませんが、Amazonの内部ではHTML生成処理をUTF-8エンコーディングとして行い、送出処理部で変換処理を行なっているのでしょう。この際エンコード変換関連処理だけを行い、Content-Lengthを更新し損ねているのでは、と考えられます。

Google Chromeは実データサイズとContent-Lengthの不整合を嫌い、値が異なった場合、読み込みが不正終了したと判断します。結果、JavaScriptのonLoad処理が発動せず、サムネイルが表示されません。

しかし、この春頃からGoogle Chromeでも「Amazonおまかせリンク」Widgetのサムネイルが表示されるようになりました。


Amazonとのパケットを解析してみたところ、従来と異なり、データがUTF-8エンコーディングで送出されるように変更されていました。Content-Typeもcharset=UTF-8となっています。

最終的な広告内容を取得するURLを確認したところ、末尾に'e=utf-8'とのパラメタを見つけました。不正な Content-Lengthを返していた当時のURLでは、このパラメタは'e=iso-8859-1'となっていました。

Amazonの内部処理が整ったのか、またブラウザ環境の変化に伴い、送出データがUTF-8でも問題ないと判断されたのかはわかりませんが、データがUTF-8で送出されるようになった結果、データサイズとContent-Lengthの不整合はなくなりました。

Google Chromeのシェアが拡大している今、Google Chromeでも「Amazonおまかせリンク」Widgetでサムネイルが表示されるようになったことは、素直に嬉しく感じます。

0 件のコメント:

コメントを投稿