「HTTP」浅析 URL

520 阅读4分钟

URL 的组成部分

image.png
统一资源定位符(英语:Uniform Resource Locator,缩写:URL;或称统一资源定位器、定位地址、URL 地址,俗称网页地址或简称网址)它最初是由蒂姆·伯纳斯-李发明用来作为万维网的地址。
URL 的组成有:协议、域名/ip、端口(url 会自动省略端口号)、路径、查询参数、锚点。接下来将依次分析这六部分。

协议

主要有 HTTP 协议和 HTTPS 协议,HTTP 协议默认使用端口号 80, HTTPS 协议默认使用端口号 443

域名

网域名称(英语:Domain Name,简称:Domain),简称域名,也是 ip 的别名。

ip

ip 地址是用来定位互联网世界中的一台设备,每个上网的设备都有自己独立的 IP 地址
IP 分为外网 IP 和内网 IP
image.png
可以用Ping命令查看域名的 IP 地址
image.png
如上图,域名 taobao.com 对应的 IP 地址是 140.205.220.96
还可以用nslookup查看域名的 ip 地址:
image.png

有一些特殊的 IP 地址

  • 192.168.XXX.XXX 表示内网地址
  • 127.0.0.1 表示本机
    • 默认 127.0.0.1 的域名是 localhost,
    • 可以在 HOSTS 文件里可以更改本地 127.0.01 的域名

端口

一台服务器可以提供很多服务,每个服务有不同的号码,这个号码就是端口。类似于,在麦当劳点餐,有咖啡窗口、快餐窗口、甜品站窗口,只能在咖啡窗口点咖啡、甜品站窗口点甜品。

一台机器可以提供很多不同的服务

  • 80 端口:HTTP 服务
  • 443 端口: HTTPS 服务
  • 21 端口: FTP 服务

端口的使用规则

  1. 0-1023 端口是系统用的,我们一般使用1024 以后的端口
    1. 比如 http-server 默认使用 8080 端口
    2. 可以通过-p 参数指定不同端口,例如:这样就可以指定使用 1234 端口
hs . -c-1 -p 1234
  1. 一共有65535 个端口

域名

网域名称(英语:Domain Name,简称:Domain)
域名是 IP 的别称

  • 一个域名可以对应多个 IP, 这叫负载均衡,防止一台机器无法同时为大量用户提供服务
    • 不同地区 ping taobao.com 会看到不同的 ip 地址
  • 一个 IP 也可以对应多个域名,这叫主机共享,很容易卡

域名和 IP 怎么对应起来?DNS!

域名系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务。

当你输入www.baidu.com

  • chrome 浏览器会向电信/联通提供的DNS 服务器询问www.baidu.com对应什么IP
  • 然后电信/联通会回复一个 IP
  • 然后 chrome 浏览器会向对应 IP 地址的 80/ 443 端口发送请求
    • 服务器默认用 80 端口提供 HTTP 服务
    • 服务器默认用 443 端口提供 HTTPS 服务
  • 请求内容是查看www.baidu.com的首页

关于域名的其他知识

www.baidu.com和baidu.com是不同的域名

  1. .com 是顶级域名
  2. baidu.com 是二级域名(俗称一级域名)
  3. www.baidu.com 是三级域名(俗称二级域名)
  4. 所以www.baidu.com是baidu.com的子域名
  5. 例如,github.io 是 github 的域名, userid.github.io 是每个用户的域名

路径

如何请求同一服务器上不同网页?
用路径即可
路径是没有必要有后缀的
developer.mozilla.org/zh-CN/docs/…
developer.mozilla.org/zh-CN/docs/…

查询参数

请求同一个页面,能得到不同内容吗?
用查询参数即可
www.baidu.com/s?wd=hi
www.baidu.com/s?wd=hello

锚点

同一内容,不同位置?
用锚点即可
developer.mozilla.org/zh-CN/docs/…教程
锚点不支持中文,会把中文进行编码
注意!
锚点不会经过服务器,因为是本地内容
所以服务器不会阅读井号 # 之后的内容,不可以拿这个传参数!

URL 举例

最后我们再来看看 URL 的不同部分
image.png
https 默认用 443 端口
所以www.baidu.com 等同于 www.baidu.com:443

curl 使用示例

curl -v www.baidu.com
整个过程:

  • 向 DNS 查询域名对应的 IP 地址
  • 建立 TCP 连接,TCP 连接建立好之后,开始发送 HTTP 请求
  • 下图中以大于号开始的
    • GET / HTTP/1.1 到 > Accept: */*是请求头

image.png

  • 之后服务器会发送回来一个响应
    • 分为响应头和响应体
    • 以下内容是响应头
    • image.png
    • 响应体就是 HTML 页面
  • 响应结束后,关闭 TCP 连接
  • HTTP 请求结束