YouTubeのリダイレクト動作について

動作要約

2008年8月28日 この項のみ最新の内容に修正

  1. youtube.com (サブドメインなし)へのアクセスは無条件で全て www.youtube.com へリダイレクトされる。(つまり、youtube.comへのアクセスはwww.youtube.comへのアクセスと等価である)
  2. 国別コンテンツ設定をしていない状態*1http://www.youtube.com/hoge〜 にアクセスすると、IPによってアクセス地域が判別され、自動的にそのアクセス地向けの国別コンテンツ設定クッキーを食わされる*2
  3. 国別コンテンツ設定が行われた状態で http://www.youtube.com/hoge〜 へアクセスすると、http://[country-code].youtube.com/hoge〜 へのリダイレクトが行われる。なお、国別コンテンツ設定が「全世界(Worldwide)」の場合はリダイレクトされない。(country-codeが「www」になると思えばOK)
  4. 国別コンテンツ設定をしている/いないに関わらず、 http://[country-code].youtube.com/hoge〜 にアクセスすれば、任意の国のコンテンツ設定で閲覧できる。
    • 国別コンテンツ設定を既にしていた場合(クッキーを食べていた場合)、クッキーは上書きされない。
    • 国別コンテンツ設定をしていなかった場合(クッキーを食べていなかった場合)、その国の国別コンテンツ指定クッキーを食わされる。
  5. 国別コンテンツ設定をしている/いないに関わらず、存在しないcountry-codeへアクセスした場合には404が返る。リダイレクトはされない。
  6. 使用言語の設定は、リダイレクトに一切の影響を及ぼさない。

【注意】

2008年8月1日頃?仕様変更のため動作が変わりました。「実例」以下の内容は現在と挙動が異なり、フィルタも正しく動作しません。
最新のフィルタは独立エントリd:id:Falky:20080803:1217736673へ移動しました。

実例

[HTTP headers]
In = FALSE
Out = TRUE
Key = "URL: YouTube SimpleURI alpha.20080308 (out)"
URL = "^(youtube.com/watch\?v=[0-9a-zA-Z_-]+\&fmt=(6|18)(^?))"
Match = "http://([a-z]+.|)(youtube.com/watch\?v=[0-9a-zA-Z_-]+)\0"
Replace = "$JUMP(http://\0&fmt=18)"

このフィルタは、YouTubeの動画ページのURIからサブドメインを除去するフィルタ*3である。
このようなフィルタが正常に動作するためには、地域設定を必ず「Global」にしておく必要がある。例えば地域設定「日本」のクッキーを喰っている状態で上のフィルタを使用すると、サーバ⇔Proxomitron間で以下のようなループに陥る。

JumpTo: http://youtube.com/watch?v=aKXWCDyXgEM&fmt=18

+++RESP 4017+++
HTTP/1.1 303 See Other
Date: Wed, 04 Jun 2008 18:50:06 GMT
Server: Apache
Expires: Tue, 27 Apr 1971 19:44:06 EST
Cache-Control: no-cache
Location: http://jp.youtube.com/watch?v=aKXWCDyXgEM&fmt=18
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
+++CLOSE 4017+++
JumpTo: http://youtube.com/watch?v=aKXWCDyXgEM&fmt=18

+++RESP 4019+++
HTTP/1.1 303 See Other
Date: Wed, 04 Jun 2008 18:50:07 GMT
Server: Apache
Expires: Tue, 27 Apr 1971 19:44:06 EST
Cache-Control: no-cache
Location: http://jp.youtube.com/watch?v=aKXWCDyXgEM&fmt=18
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
+++CLOSE 4019+++
JumpTo: http://youtube.com/watch?v=aKXWCDyXgEM&fmt=18

ブラウザのエラーメッセージについて

このように、サーバとProxomitronがそれぞれ別のURIを要求し続けるループに陥った場合、ブラウザに表示されるエラーメッセージは「リダイレクトがループしています」といったものではなく、別のエラーとなることがある。(要追加検証)*4

このエラーメッセージは非常に惜しい。クッキーが無効になっているのではなく、逆に変なクッキーを食ったがためにリダイレクト異常が起きている。もちろん、Proxomitronを使うということ自体がイレギュラーなので、仕方ないことなんだけどね。

*1:つまり、YouTubeを一度も訪れたことがない状態、あるいはそれと同様=クッキー非所持状態

*2:日本からアクセスすれば、当然「国別コンテンツ設定=日本」のcookieを食わされる。

*3:正確にはそれ以外に、動画のキー以外の邪魔なもの―検索ゴミなど―を除去し、さらにH.264で視聴するために&fmt=18を付与する。

*4:IEは8にしちゃってエラーメッセージ変わっちゃうわ、Firefoxは3を入れたり戻したりしたせいでJLPも変えちゃったりしたような変えちゃってなかったような気もしたようなーで色々と環境が変わり、もしかするとエラーメッセージが違うってのは勘違いかもしれない。