User-Agent ヘッダフィールドを利用してサイト運営者に連絡先を伝える方法
HTTP リクエスト時の User-Agent ヘッダフィールドを利用して、こちらの身元をはっきりさせておくことができます。例えばウェブスクレイピングを行う時に、不審なアクセスだと思われて問答無用で遮断されてしまうことのないように連絡先を明記するといった利用方法です。
Googlebot の User-Agent ヘッダ例
Google のユーザーエージェントである Googlebot を参考に見てみましょう。現在、その代表的なものは、以下のような値を持たせた User-Agent ヘッダを送信しています。
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
記載されている URL にアクセスすると、ウェブマスターツールのヘルプ内の Googlebot の項目に転送されます。ウェブサイトの運営者は、そのアクセスがどういったものなのかをこのようにして知ることができるというわけです。
Google の場合は URL ですが、メールアドレスを掲載しているクローラも珍しくありません。
User-Agent ヘッダフィールド値の書き方
HTTP 1.1 での User-Agent ヘッダフィールド値の書式は RFC 7321 で定義されています。
User-Agent = product *( RWS ( product / comment ) )
product は製品識別子のこと。Mozilla/5.0 や AppleWebKit/600.1.4 のように書かれている箇所です。
値は、1 つ以上の製品識別子とそれに続く 0 個以上のコメントで構成され、製品識別子の後ろには 1 個以上の空白が必須です。
コメントの書式は RFC 7320 で定義されています。
comment = "(" *( ctext / quoted-pair / comment ) ")"
ctext = HTAB / SP / %x21-27 / %x2A-5B / %x5D-7E / obs-text
コメント部分は丸括弧で囲みます。コメント内で丸括弧とバックスラッシュを使用する際には、バックスラッシュでエスケープする必要があります。
メールアドレスの記載例
以下は、コメントを利用してメールアドレスを記載した User-Agent ヘッダの例です。
User-Agent: examplebot (contact@example.com)
RFC 2616 当時の書式
HTTP/1.1 の初版の規定であり、現在では廃版となった RFC 2616 では、User-Agent ヘッダフィールド値の書式は次のようになっていました。
User-Agent = "User-Agent" ":" 1*( product | comment )
値は、1 つ以上の製品識別子あるいはコメントで構成。この版当時はコメントだけでも良かったようです。
今日学んだこと
User-Agent ヘッダフィールドの書き方。括弧内のあの文字列は全てコメントだった。