🔗
Web APIのhostプロパティはポート番号もくっつく、ほか2つ
URL parts naming. Inspired from web browsers API (new URL(), window.location) and rfc3986.が、Web APIのチートシートとしてとても優秀でした。
同時にちゃんと調べたことがなかったので、URIの仕様やWeb APIのマニュアルを読んでみたところ、面白い事実がありました。
host と hostname
Web APIを利用して、http://www.example.com:1234/
のホスト名を取得したいとき、host
ではなくhostname
を利用する必要があります。
host
プロパティだとポート番号もあわせて取得されるためです。
const url = new URL("http://www.example.com:1234/");
console.log(url.host); // www.example.com:1234
console.log(url.hostname); // www.example.com
URIの仕様を決めているRFC3986を参照しましたが、hostという言葉がポート番号を含む訳はないようです。
つまりWeb API独自のものだと理解しています。
search? query?
http://www.example.com/index.html?keyword=hoge
の?keyword=hoge
の箇所は、search
プロパティで取得できます。
const url = new URL("http://www.example.com/index.html?keyword=hoge");
console.log(url.search); // ?keyword=hoge
RFC3986によると、URIの場合はこの箇所をquery
と定義しています。自分もよくクエリと表現していました。誰かがsearch
と言ったときにも理解できるようにしたいですね。
hash? fragment?
ちなみにhttp://www.example.com/index.html#foo
の#foo
の箇所は、hash
プロパティで取得できます。
const url = new URL("http://www.example.com/index.html#foo");
console.log(url.hash); // #foo
これもURIの場合はfragment
と呼ぶようです。そもそもquery
に含まれると勘違いしていたので、認識を正す良い機会になりました。
Discussion