YouTubeのリダイレクト動作について
動作要約
2008年8月28日 この項のみ最新の内容に修正
- youtube.com (サブドメインなし)へのアクセスは無条件で全て www.youtube.com へリダイレクトされる。(つまり、youtube.comへのアクセスはwww.youtube.comへのアクセスと等価である)
- 国別コンテンツ設定をしていない状態*1で http://www.youtube.com/hoge〜 にアクセスすると、IPによってアクセス地域が判別され、自動的にそのアクセス地向けの国別コンテンツ設定クッキーを食わされる*2。
- 国別コンテンツ設定が行われた状態で http://www.youtube.com/hoge〜 へアクセスすると、http://[country-code].youtube.com/hoge〜 へのリダイレクトが行われる。なお、国別コンテンツ設定が「全世界(Worldwide)」の場合はリダイレクトされない。(country-codeが「www」になると思えばOK)
- 国別コンテンツ設定をしている/いないに関わらず、 http://[country-code].youtube.com/hoge〜 にアクセスすれば、任意の国のコンテンツ設定で閲覧できる。
- 国別コンテンツ設定を既にしていた場合(クッキーを食べていた場合)、クッキーは上書きされない。
- 国別コンテンツ設定をしていなかった場合(クッキーを食べていなかった場合)、その国の国別コンテンツ指定クッキーを食わされる。
- 国別コンテンツ設定をしている/いないに関わらず、存在しないcountry-codeへアクセスした場合には404が返る。リダイレクトはされない。
- 使用言語の設定は、リダイレクトに一切の影響を及ぼさない。
【注意】
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を使うということ自体がイレギュラーなので、仕方ないことなんだけどね。