質問やフィードバックがありましたら、フォームからお願いします
本文は台湾華語で、ChatGPT で翻訳している記事なので、不確かな部分や間違いがあるかもしれません。ご了承ください
ウェブページをブラウジングしているとき、私たちはしばしばサブドメインを使ってサービスの内容を区別します。例えば:
- music.youtube.com/ → YouTube Music へ
- youtube.com → https://www.youtube.com/ → YouTube へ
明らかに、ドメイン名が youtube.com であるため、これらの2つのドメインはどちらも YouTube によって所有されていることがすぐにわかります。そのため、私たちはその内容を信頼し、安心してブラウジングできます。それでは、どのようにして2つのドメインが同じ所有者に属しているかを判断すればよいのでしょうか?URL に youtube.com の文字列が含まれているかを確認するのでしょうか?
明らかに、これは有効な区別方法ではありません。例えば:
- youtube.kalan.dev
- youtube.com.kalan.dev
これらの2つのサブドメインはどちらも youtube の文字列を含んでいますが、すぐにそれが YouTube によって所有されていないことがわかります。
したがって、サブドメインの判別方法は右から左に探し始めるべきであり、左から右ではありません。サブドメインの判別はソフトウェアエンジニアにとっては容易ですが、ドメインの仕組みを理解していない人にとっては、サブドメインを利用したフィッシングに引っかかりやすいです。
次の問題は、右から左にいくつの部分を探すべきかということです。blog.kalan.dev
の場合、ドメイン名は kalan.dev
であり、コードは次のように書くことができます:
const host = 'blog.kalan.dev'.split('.').reverse().slice(0, 2).reverse().join('.')
しかし、これは必ずしも正しい書き方ではありません。例えば:
- ebay:www.ebay.co.uk
- google:www.google.co.uk
先ほどの書き方で見ると、co.uk がドメイン名で、www.ebay と www.google がサブドメインとなりますので、両方のサイトは .co.uk に属していると考えられますか?明らかに、この区別は間違っています。ebay は ebay であり、google は google で、両方のドメインは全く異なる会社が所有しています。理由は、国コードのトップレベルドメインがセカンドレベルドメインと組み合わさることで、独立したドメイン名として扱われることがあるからです。したがって、ここでの正しい解釈は、google.co.uk
と ebay.co.uk
を2つの独立したホストとして見なすことであり、所有者も全く異なります。
TLD(トップレベルドメイン)
ここでトップレベルドメインについて話す時が来ました。例えば、.io
、.dev
1、.org
などのサフィックスは、ICANN によって管理されており、誰でも自分のドメインを申請することができます。私の kalan.dev
も .dev
をサフィックスに持つドメインです。
ccTLD(国コードトップレベルドメイン)
地域に応じて使用できるトップレベルドメインもあります。例えば、.tw
や .jp
などです。注意が必要なのは、一部の国コードと他のセカンドレベルドメインが組み合わさると、独立したドメインを形成することもある点です。例えば:
これらの2つのサイトにおいて、momoshop.com.tw と books.com.tw がドメイン名であり、www.momoshop.com.tw と www.books.com.tw がそのサブドメインです。
eTLD(有効トップレベルドメイン)
上記のいくつかの例からわかるように、一部のトップレベルドメインはセカンドレベルドメインと組み合わせて1つのドメイン名(例えば kalan.dev
)を形成できますが、他のものは2つのドメイン名が組み合わさって1つのトップレベルドメイン(.com.tw
)になることもあります。ブラウザはどのようにしてこれを解釈するのでしょうか?その背後にあるコンセプトは、巨大なパブリックサフィックスリスト(PSL)を維持することです。リストに記載されているドメイン名は「有効トップレベルドメイン(eTLD)」と呼ばれ、このリストはこちらから取得できます。
もう1つの一般的な用語は eTLD+1 で、有効トップレベルドメイン+1つのセカンドレベルドメインが1つのドメインを形成します。この例では、.com.tw
が有効トップレベルドメインであり、momoshop がセカンドレベルドメインです。
SameSite がフロントエンドアプリケーションに与える意義
ドメインの運用メカニズムは、フロントエンドにとって最大の意義が SameSite2 の判断にあります。私たちは2つのウェブサイトが SameSite かどうかを知りたいのです。なぜなら、SameSite の場合、ウェブサイトの Cookie は共有されるからです(特別にヘッダーが設定されていない場合)。
したがって、2つのウェブサイトの URL、kalan.hacker.com
と jack.hacker.com
が与えられたとき、これらの2つの URL は SameSite ですか?一見すると、2つの URL は hacker.com
のサブドメインのように見えますが、先ほどの例と説明を見た後、まず hacker.com
がパブリックサフィックスリストにあるかどうかを確認しなければなりません。
Cookie と SameSite の議論に興味がある方は、私が以前書いた記事Cookie と CORS に関する再考もご参照ください。
GitHub を例に
GitHub では、リポジトリの設定を通じて無料で xxx.github.io
のドメインを生成できます。例えば、私の古いブログ:kjj6198.github.io/blog
。このような場合、私たちは各 xxx.github.io
の Cookie が互いにアクセスできることを望んでいません。このタイプのアプリケーションでは、各 xxx.github.io
が独立したドメインであり、.github.io
のサブドメインではないことを望みます。eTLD を使用することで、この問題を効果的に解決でき、パブリックサフィックスリストでも .github.io
の存在を確認できます。
誰がパブリックサフィックスリストを申請できますか?
publicsuffix の公式ドキュメントによれば、公式の規定に従って PR を送信すればよいようです。ただし、全体のプロセスには時間がかかるようで、過去の PR を見る限り、すべて手動で審査されているようです。
ブラウザのアドレスバーについて
私の blog.kalan.dev
は Firefox と Edge のアドレスバーに上の画像のように表示されています。上が Firefox の表示、下が Edge の表示です。
違いに気づきましたか?blog
の文字は Edge では kalan.dev
と同じ色ですが、Firefox では blog
の文字が少し淡い色になっています。Firefox のアドレスバーは、ドメイン名の色を強調するだけですが、Edge と Chrome はドメイン部分(サブドメインを含む)も一緒に強調しています。この例では、Firefox のアドレスバーを通じて blog
が kalan.dev のサブドメインであることをすぐに知ることができます。
この違いは非常に小さいですが、ドメインが eTLD を含む場合、Firefox のアドレスバーの機能は非常に便利です。例えば kjj6198.github.io
は .github.io
が eTLD であるため、全体の kjj6198.github.io
が1つのドメインになります。
次回、誰かが2つのドメインが SameSite かどうかを尋ねた場合、最良の方法は Firefox を開いて URL を入力し、強調されている部分が同じかどうかを見ることです。同じであれば、自信を持って彼らは SameSite であると言えるでしょう!
Footnotes
この記事が役に立ったと思ったら、下のリンクからコーヒーを奢ってくれると嬉しいです ☕ 私の普通の一日が輝かしいものになります ✨
☕Buy me a coffee