14、【Ubuntu】【VSCode】VSCode 断联问题分析:hostname(二)
【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
上篇 blog
【Ubuntu】【VSCode】VSCode 断联问题分析:hostname(一)
介绍了下 hostname 命令以及主机名,域名,以及全限定域名 FDQN 的概念与区别,下面继续来看下
VSCode 断联问题
上篇 blog 【Ubuntu】【VSCode】VSCode 断联问题分析:hostname(一) 提到了对于域名 csdn.net 和全限定域名 www.csdn.net,网站更常用的是HTTP 重定向 (301),当访问 csdn.net 时,Web 服务器收到请求,返回一个 HTTP 301 状态码,告诉浏览器用 www.csdn.net 访问,此时浏览器会自动跳转到 www.csdn.net,比如在终端输入
curl -I csdn.net
可以看到响应如下,回复 HTTP 301,并且告知了 csdn.net 域名的位置在 www.csdn.net,说明 csdn.net 被重定向到了 www.csdn.net

可以看到,其实不管用域名 xxx.com 还是全限定域名 FQDN www.xxx.com,一般都能访问到网站内容,从技术上没有强制要求, 因为通过 DNS 配置 和 HTTP 重定向,xxx.com 和 www.xxx.com 都能指向同一个地方
对于 www 而言,其本质上是一个主机名,表示 Web 服务的入口,www 从技术上来说不重要,但习惯上仍然广泛使用,属于一个历史遗留的仪式感,就像外卖快递上的收件人,虽然不加也能寄到,只要有地址(域名)即可,但加上更规范,可以清晰地标识该处是 Web 服务
另外,还要注意一点,在互联网上,用户看到其主机名是 www,不代表其内部的机器也叫 www,实际上,www 是给用户看的主机名,而在服务器内部,看到的则可能是 web01,web02 这样的主机名代号,也就是说,主机名在不同层级下有不同的视角:
- 用户视角:看到
www.mycompany.com这样的全限定域名 FQDN,这是一个面向公众的 DNS 记录,www作为服务别名,提示用户该地址提供网页服务,但这里不是一个真实的服务器名字,而是一个负载均衡器或 CDN 节点(Content Delivery Network,内容分发网络)的地址 - 内部视角:看到
web01,web02,db03这样的代号,真实的物理服务器或虚拟机可以被命名为类似web01.mycompany.com内部运维使用的主机名,像这样的名字不会暴露给互联网用户
其连接过程大致如下

在这个过程中,用户只知道 www.xxx.com,而负载均衡器知道后端有 web01,web02,web03 等服务器,而 web01,web02,web03 就是这些后端服务器的主机名,但它们并不知道自己对外叫 www.xxx.com
关于前面介绍的 HTTP 301 重定向,涉及到 HTTP 状态码,这些状态码是由互联网工程任务组(IETF,The Internet Engineering Task Force)在一系列的 RFC(Request for Comments)文档中定义的,这些文档是互联网标准和技术规范的基础
在规范文档 Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
RFC 7231 中,可以找到 HTTP 301 状态码如下

可以看到 301 Moved Permanently 表示请求的资源已经被永久地移动到了新的链接 URI,客户端用户应该使用新的 URI 进行后续请求,浏览器拿到这个指示后,就会跳转到新的链接
然后这里再最后说下前面使用的 curl -I 命令,在终端输入
man curl
查看 curl 命令如下

可以看到 curl 命令的功能:transfer a URL,表示通过 URL 从服务器获取数据,或者向服务器发送数据,curl 命令可以处理多种网络协议,比如 HTTP/HTTPS(访问网页),FTP/FTPS(文件传输),SCP/SFTP(SSH 传输),SMTP/SMTPS(发送邮件),FILE(访问本地文件)等等,几乎能处理所有网络传输需求
查找 -I 选项如下

可以看到 -I 选项可以请求并显示服务器返回的 HTTP 头部信息
ok,先到这里,下篇 blog 继续
