世の中には、理由は分からないけどそうなっている謎の仕様が数多くあるわけで、そんな仕様に本日朝、偶然に出会ってしまいました。
舞台は、あの Google です。
Google のアレゲな仕様のせいで凹みました。以下詳細です。
最近、コードネーム「蜂」というウェブ・アプリケーションを作っています。そこで、Googleのサイトのデータを「蜂」に取得させる実験をしていました。
しかし、なぜか特定のドメインのページだけ、ファイルを取得できないのです。「groups.google.com」というドメインのページです。403 Not Found というお決まりのページが戻ってきます。
IEなどのブラウザでは普通に取得できるし、それどころか秀丸マクロでウェブサーフィンをおこなう「なみのり」でさえ、きちんとページを取得できるのに、なぜか「蜂」では取得できないのです。
数日前からこの現象には気付いていたのですが、放ったらかしにし続けていました。今朝バグチェックを集中的におこなったので、ついでに本格的な調査をおこないました。
「蜂」のソースコードを1時間ぐらいかけて細かくデバッグした結果、結局原因は分からず終い。仕方がないので、 HTTP 通信時のヘッダーに問題があるのかと思い、デバッグ対象を、ソースコードから通信データに切り換えました。
横取り丸と、 InetSpy を落としてきて、ソフトと Google のやり取りの詳細を取得しました。
うーん、別に変なところはない。
やり取りしているデータ自体には問題がありません。違うことと言えば、そのやり取りしている情報ぐらいです。
ちなみに、「蜂」の送っているヘッダー情報は以下の通りです。JAVA 製のソフトなので、 User-Agent は、 Java1.4.0_01 です。
GET http://groups.google.com/groups?group=rec&hl=ja HTTP/1.1 User-Agent: Java1.4.0_01 Host: 127.0.0.1:8000 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive
別段変なところはないようです。JAVA のデフォルトのヘッダーですし。
仕方がないので、手打ちで送信ヘッダーを作成して比較をおこない、どこの部分の情報が問題になっているかを調べました。
数分後、全ての原因がわかりました。
「User-Agent: Java1.4.0_01」
原因はここです。
なんと、「groups.google.com」は、この User-Agent の時に、正規のページではなく 403 Not Found のページを返してくるのです。ちなみに、Googleの他のドメインではこの現象は起こりません。
嘘だろ……。
さすがに、そんな馬鹿なと思い、 User-Agent を少し変えてみました。
「User-Agent: Java」
やっぱり 403 Not Found です。よくわからないのですが、「groups.google.com」は JAVA からアクセスしようとすると、 403 Not Found を返してきます。
JAVA が嫌いなのでしょうか?
さっぱり意図がわかりません。どういうことなのでしょう。もし、識者の方がいらっしゃれば教えていただきたいものです。
過去に Google と Sun は何かあったのでしょうか?
愕然としました。
ちなみに、「User-Agent: Ja-va」などとすると、正しいデータが返ってきます。
……何じゃこの仕様は。