三打不溜还是不要三打不溜呢?
03 Dec 2018原文链接:To www or not to www – Should you use www or not in your domain? by Bjørn Johansen
在过去的 20 多年中,大家对在网站主机名中是否应该包含 www 这个话题争论不休。那么到底是否应该在主机名中使用 www 呢?
历史背景
尽管大家通常把 “域名” 和 “主机名” 视作相同的概念,但它们之间是有区别的,而且这些区别不仅仅是单纯字面上的区别。相关的描述可简化成如下内容:
作为一名 IT 管理员,你的网络即为你的网域。自然地你会给这个网域起个名字,并提供与之配套 DNS (域名解析服务器),为此,你注册一个域名,例如 “example.com“。现在,在这个网域中,你会配置你的多个主机。每个联网的机器都被视为一个主机。用于提供万维网 (World Wide Web)文档的主机会在这个网域中使用 “www” 作为主机名,因此这台主机的完整网域名称 (FQDN)是 “www.example.com”。你应该对你的网络中其他主机作类似的设置,无论你是否架设了网络服务器。这就是通常你的网域中主机的组织方式。
为了访问 “example.com“ 网域中的网络服务器,你会访问名为 “www.example.com” 的主机。顺带提一句:在互联网发展初期是不存在虚拟主机这类技术的。所有的网络服务器仅为一个网站(至少对于每个 IP 地址是这样)提供服务。那时主机名的设置无关紧要,只要主机对应的 IP 地址设置正确就够了。
对于域名解析服务器而言,“纯粹网域名称”,即网域名称去掉 “www“ 的部分,被称为 “原点“。 上世纪 90 年代互联网开始盛行之际,一些 IT 管理员开始将 DNS 原点指向与 “www” 主机相同的 IP 地址。如此一来,网站访客只需要在浏览器中输入 “example.com” 而不是完整的主机名 “www.example.com”。
接踵而至的搜索引擎优化 (SEO)
鉴于 DNS 原点 “example.com”,和主机名 “www.example.com” 可以指向不同的 IP 地址,而且从 1997 年 1 月开始,它们可以指向共享同一个 IP 地址的不同网站,SEO 的实践者开始指导大家应该把两者之一换成正统主机名,并把另外一个指向那里,同时将 301 作为使用后者访问网站时的响应代码。
此外,选用正统主机名似乎合情合理。应该用哪个呢?单就搜索引擎优化角度而言,这并不重要,只要选一个就好。但是除了搜索引擎优化之外,还有其他方面需要考虑。且带我娓娓道来。
普通人对 URL 的理解
任何一家互联网公司都会有这样的真实顾虑:使用不包含 “www” 的网址可能会让人们忘记这是一个万维网地址。我们才刚刚开始在输入网址的时候省去 “http://”。另外,由于使用习惯,也有一部分人偏向于使用完整的”正确的“主机名,例如 “www.example.com”。
现如今,这种顾虑已不那么重要了。如果你拥有一个众人皆知的顶级域名,无论你是否在主机名中包含三打不溜,大家都知道这是一个网址。因为两者之一总是会转向另一个,如果你的主机使用正统域名 “www.example.com” 但出于对美观的要求,在平面广告中使用 “example.com” 也是毫无影响的。基于同样的考虑,如果你拥有一个新式顶级域名,例如 .beer, 你可能会选择在主机名中包含三打不溜。
去掉三打不溜的网址更漂亮、更易使用
我不得不承认:相比之下,输入 “example.com” 更快,更容易读出来(你如何一口气读出 “www” ),而且它占据的空间明显更小。人们开始抛弃 “www” 并将 DNS 原点用作正统主机名的做法完全合乎情理。
那么为何主机名中是否包含 www 仍然存在争议呢?
为何我们仍然在就此争论呢?就不能任由人们随其所好地自行选择吗?
自由选择当然可行。
但是,如果你是一个网站的 IT 管理员,你很可能希望做出一个有考究的选择。因为互联网上的大多数东西并不是开始使用时就是十全十美的。这其中就有 cookies。
Cookies 会被传递给子域名
Cookies 创建于利用主机名访问网站时,会被发送给所有子域名。举例来说,如果位于 “example.com” 的网站设置了一个 cookie,浏览器会在访客访问 “www.example.com” 时把这个 cookie 传递给 “www.example.com”。既然是同一个网站,听起来这像是一件好事,对不对?但这个 cookie 也会被发给 “cdn.example.com”、“email.example.com”、“intranet.example.com”、“thirdpartyservice.example.com” 等网站。有很多第三方服务会允许你这样使用你的网域。
由 “www.example.com” 设置的 cookie 则不会被发送到 ”相邻“ 的主机上。浏览器知道这些相邻的主机提供的不是 “子服务”,而是完全不同的服务,并且它们不应该能调用你的cookies。
不必要的 cookies 会降低网站性能
每次浏览器向网络服务器发送请求时都会随附相应的 cookies。这就意味着如果你的网站为 DNS 原点设置了 cookie ,这个 cookie 将会伴随每个发送给 “email.example.com” 或 “intranet.example.com” 的请求。这样的状态会降低通讯的速度,造成糟糕的用户体验。
这样的 cookies 可被第三方读取
假设你的网站位于 DNS 原点 (“example.com”) 而且有一个用于登录 CMS 的接口, 这个 CMS 会为你的浏览器创建一个 cookie 用于保持你的登录状态。然后,当你访问 “someinternalservice.example.com” 时,那个服务的的管理员可以读取那个 cookie,并将其复制用于以你的身份登录 “example.com” 对应的企业的 CMS。对于的你的电子邮件服务商、CDN 服务商,这个道理同样适用。
如果你注重 “example.com” 对应网站或服务的安全,请务必在主机名前面加上 “www”。如果这都无法说服你决定使用三打不溜,我真不知道什么理由能使你改变想法。使用 HTTPS 或两步验证(2FA)是不可能帮你规避这类安全隐患的,因为那个 cookie 就好比一把万能钥匙。其他的安全措施,例如 IP 限制 可以起到防护作用。
子域名的 Cookies 亦可由你共享
如果你有一项服务架设在一个子域名上,例如 “sso.example.com”, RFC 6265 规范允许你在 DNS 原点设置一个 cookie 并将它与 “www.example.com” 共享。所以请避免将 “存粹域名” 用作主机名,其实这种设置对你而言更加灵活。
DNS 原点不能用作 CNAME
出于对灵活性的考虑,我们需要继续关于 DNS 的讨论。
DNS 对其原点的限制是:原点必须是一个 A 类型的记录,这意味着它必须指向一个固定的 IP 地址。
当你的网站规模壮大,你把它搬到一个主机服务上,或者想把它指向一个网络应用防火墙或 流量攻击(DDoS)缓冲器时,你可能考虑使用 CNAME 类型的记录将主机名指向另一个更灵活的主机名,这会是一个由服务商管理的可随访问量及网站需求变化的主机名。
而如果你的网站架设在 DNS 原点(“example.com”),这就无法实现了。但把带 “www” 主机名用于 CNAME 记录毫无障碍。所以如果你现在或预计需要任何对扩展灵活度的话,你应该在网站上线时就选择使用带有 www 的主机名。
结论:选用带 www 的主机名
你可自行选择是否在主机名中包含 www 。我承认 DNS 原点看起来更美观,但这只不过是浏览器地址栏的显示效果而已。你可以将 “www.example.com” 用作你的正统主机名,但其他情况下使用存粹域名即可。无论如何,DNS 都会把用户导向正确的位置。
但是出于对性能、安全、灵活性的考虑,你应该使用包含 www 的完整主机名。
这应该就此了结关于主机名是否包含 “www” 的争议: 务必选用带 www 的主机名!