HTTP 2 HTTP 基础知识

210 阅读6分钟

2022.10.18

HTTP 是超文本传输协议(Hyper Text Transfer Protocol)的缩写,于 1990 年由李爵士发明。protocol(协议)是计算机常用单词,也是互联网重要概念之一。

HTTP 的工作流程是这样的:当你在国内的浏览器里输入baidu.com,你的浏览器会向服务商提供的 DNS 服务器询问baidu.com对应的 IP,服务器会回答一个 IP(该过程复杂,略),然后浏览器才会向对应的 80/443 端口发送 HTTP 请求。

谈到 HTTP 之前,必须先了解 IP 和端口。

1 网络 IP 和端口

1.1 IP

IP 指网际互连协议(Internet Protocol),是 TCP/IP 体系中的网络层协议,它主要约定了两件事:

1.如何定位一台设备。

2.如何封装数据报文,以便与其他设备交互。

HTTP 主要利用的是 IP 的第一种作用。

IP 一般分为内网和外网,以路由器网关作为唯一的连接点。以一个家庭网络举例,所有连接路由器的家内联网电器(如电脑和手机)都属于内网,路由器以外的电信 DNS 服务器、电信其他用户以及世界上其他的互联网用户均属于外网,跨内外网访问必须通过路由器。

在电脑命令行键入ipconfig可以知道自己的网络状态和部分 IP、DNS 等信息。

进入网站 www.ip138.com 可以获取自己的外网 IP。

举例,几个特殊的常用 IP:

  • 127.0.0.1 表示自己
  • localhost 通过 hosts 指定为自己
  • 0.0.0.0 不表示任何设备

1.2 端口

基于 TCP/IP 协议,任何服务想要在计算机中运行,必须要指定一个端口号,一台独立的计算机有 65536 个端口号(port),该协议定义的端口也被称为虚拟端口或协议端口,由 Internet 编号分配机构 (IANA) 维护并决定预期用途。

一般 0~1023 端口被定义为非临时端口、系统端口或众所周知的端口,例如 HTTP 默认使用 80 端口、HTTPS 是 443 端口,FTP 服务使用 21 端口。

所有的 http/https 网址由于端口固定,其实都自动省略了:80/:443 等端口号。

命令行可以指定部分服务的端口号,例如用hs -c -1 -p 1234命令,可以令 http-server 使用 1234 端口。

2 URL

URL 就是我们打开网页时使用的网址,全称为统一资源定位符(Uniform Resource Locator),表示各种互联网文件资源的地址,比如网页、图像、音频、视频、JavaScript 脚本等等。一个 URL 对应一个资源,但是同一个资源可能对应多个 URL。

URL 由多个部分组成,以下列网址为例:

https://www.baidu.com/s?wd=hello&rsv_spt=1#5

将域名转换为数字 IP、添加端口号后,我们可以尽可能还原上述网址的原貌:

https://220.181.38.148:443/s?wd=hello&rsv_spt=1#5

以上述网址为例,它完整包含了一个网址所有可能出现的元素:

协议 :// 域名或IP : 端口号 / 路径 ? 查询字符 # 锚点

想要在浏览器打开一个网页,域名是必须输入的,浏览器会自动选择协议,端口号必定会被浏览器隐藏,路径、查询字符和锚点视需求输入,所有元素必须按顺序排列。

以上述网页为例,分析 URL 的组成元素:

2.1 协议

https是协议名,其中的 HTTPS 是在 HTTP 的基础上通过安全性改造而来。经过了 HTTPS 升级的网站在遇到 HTTP 开头的网址时会自动转换协议。

需要注意,使用 HTTPS 开头无法打开只有 HTTP 协议的网站。

2.2 域名

baidu.com通常称为域名,用://连接,其本质是外网 IP(相对内网而言)。使用命令ping baidu.com可以得知网址的 IP 为220.181.38.148,但直接用 IP 访问一般会被服务器拒绝。一个域名连接多个 IP 被称为均衡负载,这是中大厂为了防止一台服务器过载采取的策略;一个 IP 对应多个域名被称作共享主机,资金有限的个人开发者或小公司通常会这么做。

要注意www.xxx.comxxx.com并不是同一个域名。com是顶级域名之一,xxx.com是二级域名(也有俗称一级域名),www.xxx.com是三级域名,它们之间的关系是父子关系。同理,www.xxx.comxxx.com可能是归属不同公司的网站。

将域名和 IP 一一对应的方法,就是DNS(域名系统,Domain Name System)。这里介绍一个有关 DNS 的小技巧,当你因为 DNS 故障而无法联网时,可以采取以下方法:

右键开始栏右下角的网络图标 -> 选择“网络和 Internet 设置” -> 选择更改适配器选项 -> 右键正在连接的 WLAN 或者以太网 -> 选择属性 -> 双击 Internet 协议版本 4(TCP/IPv4) -> 选择使用下面的 DNS 服务器地址 -> 从以下的 DNS 地址里选择一个填入:

                首选                 备用
114DNS          114.114.114.114      114.114.115.115114应用广泛,但出过事故,还是第三方公司,不推荐)
阿里DNS         223.5.5.5            223.6.6.6
百度DNS         180.76.76.76         (无)
谷歌(香港)DNS  8.8.8.8              8.8.4.4
Open(香港)DNS  208.67.220.220       208.67.222.222

2.3 端口号和路径

443是端口号,用:号连接。由于协议与端口号一一对应,浏览器都会省略端口号。

s是路径,用/连接并划分内部,不同的路径可以请求不同的页面。

2.4 查询参数和锚点

wd=hello&rsv_spt=1是查询参数,用?号连接。在同一个页面里,我们想要看到不同的内容,就可以利用查询参数。

5是锚点,用#号连接。在同一个内容里,我们想快速定位到不同的位置,就需要利用锚点。

在浏览器输入框的锚点位置可以输入中文,但实际上不支持中文,解析网址时会将中文还原为对应的字符码。

3 常用命令

curl命令可以发送 HTTP 请求,如:

curl -v http://baidu.com
curl -s -v --https://www.baidu.com

常用的 curl 命令如下:

curl url能在控制台输出网页的所有内容。控制台的默认显示上限是 1000 行,如果想要在控制台完整显示大型网页,需要更改控制台设置。以 Cmder 为例:选择 大小&位置 -> 长控制台输出 -> 改成一万行,保存后重启。

curl -v url能显示更详细的网页内容。

ping 命令也是非常常用的,它有很多强大的功能,如:

  • ping -t 一直 ping 直到中断。
  • ping -n count 指定回复次数,默认为 4。

有些开发者出于安全考虑,会禁止 ping 功能,比如 ping qq.com 就得不到结果。

nslookup baidu.com可以查询baidu.com的 IP 信息。