CORS 中源的比较
定义
在日常开发当中,我们一般遇到的源(Origin)是指元组源(tuple origin),由以下几个部分组成:协议、主机名、端口、域名。
在主机名包括了域名的情况下,关于规范中为什么同时定义了主机名和域名,ChatGPT 3.5 是这样说的:“在 HTML 中,元组源定义同时包括 host 和 domain 的目的是为了允许在同源策略中进行更精细的控制和识别。host 表示主机的网络位置,而 domain 表示主机所属的域。”
比较
当源 A 与源 B 的协议、主机名、端口都一致的时候,A 与 B 视为同源。
主机名可以是IP或者域名,规范中还定义了其他两种。
Cookie 的跨源
一个页面可以为本域和其父域设置 cookie,只要是父域不是公共后缀。假如我有一个域名 example.com
,那么 a.example.com
是它的子域名。我在 a.example.com
下可以为 example.com
设置 cookie。但是当 example.com
加入了公共后缀表
后,这就不行了。因为这时候获取到的可注册域名就不一致了。
主机名 | 公共后缀 | Registrable domain |
---|---|---|
com | com | null |
example.com | com | example.com |
www.example.com | com | example.com |
sub.www.example.com | com | example.com |
EXAMPLE.COM | com | example.com |
example.com. | com. | example.com. |
github.io | github.io | null |
whatwg.github.io | github.io | whatwg.github.io |
إختبار | xn--kgbechtv | null |
example.إختبار | xn--kgbechtv | example.xn--kgbechtv |
sub.example.إختبار | xn--kgbechtv | example.xn--kgbechtv |
[2001:0db8:85a3:0000:0000:8a2e:0370:7334] | null | null |
参考资料
- HTML Origin 规范
- 理解“同源”和“同站”
- ChatGPT 3.5:“为什么HTML 的元组源定义同时包括 host 和 domian”
- MDN 浏览器的同源策略