网址的奥秘:HTTP协议 / 域名 / 端口 / 路径 / 参数

更多
2021年03月21日 08点03分 作者:叶飞 修改

@想一想@:为什么输入网址就能够访问网页?

浏览器

不是在任何地方(记事本)输入网址都能访问网页的,一般来说,我们只能通过浏览器(browser)打开网站。常见的浏览器包括:

  • IE:微软出品
  • Chrome:Google出品
  • Firefox:Mozilla出品
  • 其他国产浏览器:迅雷/QQ/360……山寨套壳出品

浏览器曾经被认为是互联网的入口,众多厂商一度杀得天昏地暗,详见:浏览器大战。


网址解析

当我们让浏览器打开一个网页的时候,浏览器首先会解析网址。比如:

https://17bang.ren/Article/Category-1?size=50&sort=Asc就会被解析成:

  • 协议(protocol):https
  • 域名(domain):17bang.ren
  • 路径(path):/Article/Category-1
  • 参数(parameter):size=50&sort=Asc

其实,这里面还隐藏了一个端口(port),看这个网址:

http://localhost:58545/Registerlocalhost也算是一个域名(地址),冒号后面跟的就是端口:58545,默认的

  • http协议,端口80
  • https协议,端口443

即,https://17bang.ren 和 https://17bang.ren:443是一样的。

演示:https://17bang.ren:443 OK,https://17bang.ren:443 不行。

URI和URL

网址又被称之为URIUniform Resource Identifier),统一资源标识符

但日常用语中更多的被称之为URL(Uniform Resource Locator),统一资源定位符。

究竟哪一种更规范,呵呵,这个有得扯:有兴趣的同学随便看看


域名

以小数点(.)为分割,从后往前倒着数,依次是一级/二级/三级……域名,比如:

  • ren,或者常见的com、cn,就是一级域名,又被称之为根域名
  • 17bang(.ren),或者baidu(.com),就是二级域名
  • www,已经是三级域名了

域名需要(花钱)申请,我们一般能申请的,是二级域名,比如17bang.ren。

PS:憋问为什么不是17bang.com,o(╥﹏╥)o

二级以上的,我们可以自己是设置,比如:sample.17bang.ren,飞哥自己配的。

DNS

Domain Name System,域名系统,负责域名的解析:把英文字母(甚至中文)组成域名解析成数字格式(本质二进制,表示十进制)的IP地址。

cmd演示:nslookup 17bang.ren

C:\Users\86186>nslookup 17bang.ren
服务器:  192.168.1.1
Address:  192.168.1.1
非权威应答:
名称:    17bang.ren
Address:  121.4.222.169

但域名和IP地址不是一一对应关系,一个IP地址可以挂多个域名。

一个特殊的域名:localhost,对应127.0.0.1,即当前电脑。

缓存和镜像

注意上文中有“非权威应答”,啥意思呀?

同学们应该能够想象得到:域名和IP地址之间,应该有一张映射表。但

  1. 这张表放哪里呢?
  2. 这张表的数据量现在应付非常非常庞大,怎么查询才最快呢?

因为域名是分级的,所以它天然是一个由根域名向下分叉的树状结构(复习),所以这个映射表理论上是分节点分级存储的,查找时也一样,从根域名开始,逐级查找。

但为什么说是“理论上”,因为实际上,这张映射表整个互联网到处都是……

这个映射表是允许/鼓励复制的:

  • 官方的、完整的、即时的复制,我们一般称之为镜像
  • 非官方的、部分的、不那么严格的复制存储,我们一般称之为缓存

@想一想@:为什么要这么做?

  • 冗余容灾:一台服务器崩了,还可以有其他服务器用
  • 快捷:就近获取域名解析,最近可以近到当前所用的本地电脑

PS:到目前为止,全世界一共有13个IPv4根域名服务器(1主12辅),没有一个在中国……2019年6月,中国工信部同意中国互联网络信息中心设立域名(镜像)根服务器及域名根服务器运行机构。我国是希望在IPv6上能够弯道超车(雪人计划)……


端口

port,这里专指TCP/IP协议中用数字表示的逻辑端口。

我们可以把服务器想象成一个多功能办事大厅,端口就是服务窗口,办不同的事,就要去不同的窗口。

服务器也是一样,不同的通信请求,就要走不同的端口。

服务器可以打开(监听listen)端口,和其他设备进行通信;也可以关闭端口,保护自身安全。(防火墙常规操作)

端口分三类:

  1. 公认端口(Well Known Ports):从0到1023。机构给常用传输协议预留的端口号,(复习:http默认80,https默认443
  2. 注册端口(Registered Ports):从1024到49151。供用户和普通软件程序使用
  3. 动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。仍然是预留的,现在还没用,也不建议用户使用

演示:查看端口被谁占用:

  • 控制台输入: netstat -ano | find "8876" (8876指端口号),找到这个端口并哪一个进程(有id)使用
  • 控制面板找到该id的进程


路径

最开始的时候,所有的网页就是服务器上一个一个真实存在的(HTML)文件。

这些文件按目录组织,文件的路径就是网址里面的路径,只是windows里面的反斜杠变成了正斜杠。

请求和响应

最简单的理解,我们在浏览器中输入某个网址,回车,实际上就是通过浏览器:

  1. 向网址域名所指定的服务器80端口发送了一个HTTP(S)请求(request)
  2. 服务器通过端口监听到请求之后,就会解析网址中的路径
  3. 找到相应的文件,发送给客户端浏览器,这被称之为响应(response)

更具体的HTTP协议和URL参数我们下章再讲。

浏览器F12演示:网络 - 请求/响应


作业

服务器 云计算 Web开发
赞: 0 踩: 0

打赏
已收到打赏的 帮帮币

你的 打赏 非常重要!
为了保证文章的质量,每一篇文章的发布,都已经消耗了作者 1 枚 帮帮币
没有“帮帮币”,作者无法发布新的文章。

全系列阅读
评论 / 0

编程基础


项目管理相关

需求发布、开发规划、部署、测试,源代码版本管理(git)等……

逸闻史话

认识计算机

编程语言

数据结构和算法

Web开发基础

全部
关键字



帮助

反馈