beroの日記: yahooとyimgを別ドメインにする理由
複数のドメイン名を使ったほうが、ブラウザが平行してデータをダウンロードできるから
初耳です。HTTP1.1仕様であるRFC2086には「サーバやプロキシへ最大で 2 接続」とありますが
ドメインは無関係です。(サーバとドメインの違いについてはココでは解説しません)
リンク先記事
の元ネタは
Yahoo!パフォーマンスチーム、最新高速化ルール20を発表
6.ドメインをまたがってコンテンツを分離 (コンテンツ)
と思われますが、
原文
の詳細スライドでは
Split components across domains
- Maximize parallel downloads
- But not more than 2-4 domains, because of the DNS lookup penalty
- www.example.org - HTML content
- static.example.org - HTML components
とあるので、ここでいう「domains」は所謂「ドメイン」ではなく、サブドメイン含む「サーバ」のことだと思います。(原文も悪いですが)
# なので同一IPで異なるドメインを提供するバーチャルサーバでは別ドメインにしても無意味かも(RFC読み込んでないので不明)。
したがってリンク先の
ヤフーでは、ページはyahoo.comやyahoo.co.jpのドメイン名に置いてありますが、画像ファイルはyimg.comやyimg.jpのドメイン名に置いてあります。これはなぜでしょうか?
という問い(「ドメイン名」にサブドメイン名を含まない文脈)に対する答えとしては間違っていると思います。別にimages.yahoo.com等でもいいわけですから。
おそらく原文詳細を読んでいないのではないかと。
ではなぜ異なっているかは、
10. コンポーネントに対してクッキーフリードメインを使う (クッキー)
cookie-free hosting for components
- Option 1: Separate subdomain (static.example.org)
- Option 2: A new TLD (e.g. yimg.com, ytimg.com,images-amazon.com)
- Proxies might refuse to cache
だと思います。
クッキーの仕様上、
www.example.org はクッキーあり、static.example.org はクッキー無し(Option 1)、という運用や
www.example.orgとfoo.example.orgで共通クッキーあり、という運用は可能ですが、
www.example.orgとfoo.example.orgで共通クッキーあり、static.example.orgはクッキー無し、のように同時に運用はできません(よね?)
仕方ないのでクッキー無しを分けるために別ドメインにしている(Option 2)のだと思います。
したがって問いに対する答えは、「3つ以上のホストで共通クッキーありとクッキー無しを分けるため」だと思われます。
ここでクッキー無しにする理由は、リンク先記事では
不必要なクッキーによる通信量の増加を避けるため
クッキー自体は35バイト程度ですが、1日10億PVあるヤフーならば(中略)合計で1日200Gバイトほど、余分にデータを受信処理していることになります。
などと書いていますが、そんな数バイトのセコイ話ではなく、(クッキーによってコンテンツ内容が動的に変わるかもしれないので)キャッシュを有効に使えないことがあるからです。キャッシュが使えず再取得することになれば数バイトでは済みません。
記事を書いた人はやはり原文を読んでいないのではないかと。
まとめ
- 分けるのはサブドメインで良い。一方バーチャルドメインで別ドメインにしても無意味(かも)
- 別ドメインにする必要があるのは、3つ以上のホストで共通クッキーありとクッキー無しを分けるとき既にトップレベルのクッキーを使っていてやむを得ないとき
- クッキーは数バイトとかセコい話ではない
追記: 上記「リンク元記事」としてるのは、この記事の抜粋らしい
追記: 共通クッキー云々は俺の推測で、Yahooの解説では
クッキー無しにするために、
www.example.orgを使ってるなら、static.example.orgサブドメインにすればいい。
example.orgで既にトップレベルのクッキーを使ってるなら、トップレベルのドメインを別に買うしかない。
とあります。
追記:
俺のツッコミに対して
たしかに、クッキーフリーにするだけなら、技術的にはサブドメイン名で問題ないです。でも、昨今では標準のWWWサーバーのサーバー名がwww.example.jpだったとしても、example.jpへのアクセスを逃すのはもったいないということで、両方でアクセスできるようにしていることは多いです。wwwなしサーバーへのアクセスをwww付きサーバーへリダイレクトすればいいのですが、それもされていないことが多いですね。さらに、簡潔さを求めてexample.jp(wwwなし)を標準としている場合もあります。
ですから、別にshopping.example.jpとwww.example.jpなど複数のホストで共通クッキーを使うという前提がなくても、静的ファイルに対するリクエストに無駄なクッキーが乗らないようにするには、クッキーフリーのドメイン名をpay-levelドメイン名で分けるという判断をするのがシンプルで良いのです。
と補足していますが、これは一般論としては正しいのかも知れませんが、Yahoo自ら別の解説をしているのですから、
ヤフーでは、ページはyahoo.comやyahoo.co.jpのドメイン名に置いてありますが、画像ファイルはyimg.comやyimg.jpのドメイン名に置いてあります。これはなぜでしょうか?
の答えとしてはやはり不適切だと思います。あえていえばYahooが本当の理由を隠していて筆者の推測のほうが正しいということもありえますが、Yahooの解説で十分合理的な説明がつくので、そのようなうがった見方をする必要を感じません。
いずれにせよ筆者の主張が正しいかどうかはどうでもよくて、仮に間違っててもスルーされるだけですが、
筆者の主張がYahoo!パフォーマンスチームの高速化ルールであるかのように書かれているのが報道サイトとしては問題だと思います。
#ちなみにwwwありとなしの両方でアクセスできるようにしてるとpagerankが分散するので、SEO的には一方にリダイレクトして合算するのを推奨。ぐぐるなんたらガイドにあったような。
yahooとyimgを別ドメインにする理由 More ログイン