1 使用 HTTP 协议访问 Web
根据 Web 浏览器地址栏中的 URL,Web 浏览器从 Web 服务器中获取文件资源等信息,从而显示出 Web 界面。
Web 使用 HTTP 协议(Hyper Text Transfer Protocol,超文本传输协议)作为规范,完成客户端到服务端等一系列操作流程。Web 是建立在 HTTP 协议上通信的。
2 HTTP 的诞生
2.1 Web 的诞生
1989 年 3 月,有人提出让两地研究者共享知识的设想。初步设想的是借助多文档之间相互关联形成的超文本,连接成可相互参阅的 WWW(万维网)。
现在已经提出了 3 项 WWW 构建技术:文本标记语言 HTML、文档传输协议 HTTP 和定义文档所在地址的 URL。
2.2 HTTP 的发展
- HTTP/0.9,单行协议。请求只有 GET,响应只有 HTML 文档。
- HTTP/1.0,构建可扩展性。增加 Header,状态码,支持多种文档类型……
- HTTP/1.1,标准化协议。链接复用,缓存,内容协商……
- HTTP/2.0,更优异的表现。二进制协议,压缩 header,服务器推送……
3 网络基础 TCP/IP
通常使用的网络是在 TCP/IP 协议族的基础上运作的,HTTP 是它内部的子集。
3.1 TCP/IP 协议族
计算机与网络设备进行通信,双方需要基于相同的规则,比如怎么检测通信目标、哪一方先发起通信、使用什么语言通信、怎么结束通信。不同硬件和操作系统之间的通信也需要一种规则。我们把这种规则称为协议。
TCP/IP 是互联网相关的各类协议族的总称。
3.2 TCP/IP 的分层管理
TCP/IP 分为四层:应用层、传输层、网络层和数据链路层。
- 应用层,决定了向用户提供应用服务时通信的活动。包括 FTP(File Transfer Protocol,文件传输协议),DNS(Domain Name System,域名系统)和 HTTP 等。
- 传输层,提供处于网络连接中两台计算机之间的数据传输。包括 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报协议)。
- 网络层,用来处理网络上流动的数据包,规定了通过怎样的传输路线到达对方的计算机,并把数据包传送给对方。数据包是网络传输的最小数据单位。
- 链路层,处理连接网络的硬件部分。控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。
3.3 TCP/IP 通信传输流
以 HTTP 为例,首先客户端在应用层(HTTP 协议)发出一个 HTTP 请求;之后在传输层(TCP 协议)把应用层接收到的数据(HTTP 请求报文)进行分割,各个报文标记序号和端口号转发到网络层;网络层(IP 协议)增加作为通信目的地的 MAC 地址并转发给链路层。
接收端的链路层接收到数据并想上层发送,一直到应用层。当数据传递到应用层才能算真正接收到用户发来的 HTTP 请求。
发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。这种把数据信息包装起来的做法称为封装。
4 与 HTTP 相关的协议:IP、TCP 和 DNS
4.1 负责传输的 IP 协议
IP 网际协议位于网络层,作用是把各种数据包传送给对方。需要满足 IP 地址和 MAC 地址这两个重要条件。
IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC 地址基本上不会更改。
-
使用 ARP 协议凭 MAC 地址通信
IP 间的通信依赖 MAC 地址。通信的双方通常经过多台计算机和网络设备中转才能连接到对方。中转时会利用下一站中转设备的 MAC 地址来搜索下一个中转目标。这时,会采用 ARP 协议(Address Resolution Protocol)。ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 MAC 地址。
-
没有人能够全面掌握互联网中的传输状况
在到达通信目标前的中转过程中,那些计算机和路由器等网络设备只能获悉很粗略的传输路线。无论哪台计算机、哪台网络设备,它们都无法全面掌握互联网中的细节。
4.2 确保可靠性的 TCP 协议
TCP 位于传输层,提供可靠的字节流服务。
字节流服务是指,为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理。可靠的传输服务是指,能够把数据准确可靠地传给对方,也就是能够确认数据最终是否送达到对方。
-
为了准确无误地将数据送达目标处,TCP 协议采用了三次握手策略。用 TCP 协议把数据包送出去后,TCP 会向对方确认是否成功送达。 握手过程中使用了 TCP 的标志—— SYN(synchronize) 和 ACK(acknowledgement)。
假设是客户端发起的建立请求,刚开始客户端处于 CLOSED 状态,服务器端处于 LISTEN 状态。
- 发送端首先发送一个带 SYN 标志的数据包给对方,并指定初始化序列号 ISN(c),此时客户端处于 SYN_SENT 状态。
- 接收端收到后, 回传一个带有自己的初始化序列号 ISN(s) 的 SYN 和客户端的 ISN(c) + 1 作为值的 ACK 标志的数据包以示传达确认信息,客户端处于 SYN_RCVD 状态。
- 最后,发送端再回传一个值为 ISN(s) + 1 的 ACK 标志的数据包,发送端处于 ESTABLISHED 状态。
- 服务器端接收到 ACK 报文后,进入 ESTABLISHED 状态,代表“握手”结束。
若在某个过程中断,则 TCP 会再次以相同的顺序发送相同的数据包。
-
建立一个连接需要三次握手,而终止一个连接要经过四次挥手。假设是客户端发起的关闭请求。
- 客户端发送一个 FIN(finish) 报文,报文指定一个序列号。此时客户端处于 FIN_WAIT1 状态。
- 服务器端接收 FIN 后,会发送 ACK 报文,并且把客户端的序列号值 +1 作为报文的序列号值,表明已接收到客户端报文。此时服务器端处于 CLOSE_WAIT 状态。
- 服务器端向客户端发送 FIN 报文,并且指定一个序列号。服务器端处于 LAST_ACK 状态。
- 客户端收到 FIN 之后,发送一个 ACK 报文应答,且把服务器端序列号值 +1 作为 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。一段时间后确定服务端收到自己的 ACK 报文后会进入 CLOSED 状态。
- 服务器端接收到 ACK 报文之后,进入 CLOSED 状态。
4.3 负责域名解析的 DNS 服务
DNS 服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。
5 各种协议与 HTTP 协议的关系
6 URI 和 URL
6.1 URI
URI(Uniform Resource Identifier)是指统一资源标识符。
- Uniform 是指通过统一的格式标记不同类型的资源。
- Resource 是指任何可标识的东西。
- Identifier 是指可以标识的对象,也称作标识符。
URI 就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。HTTP 协议的协议方案是 http,除此之外,协议方案还有 ftp,telnet 等。
URI 用字符串标识某一互联网资源,而 URL表示资源的地点(互联网上所处的位置)。可见 URL是 URI 的子集。
要想找到某个人,我们可以通过地址来查找,如“湖北省/武汉市/XX区/XX街道/XX小区/A1-1-1001/书房/张三”,这种方式就是 URL。除此之外,我们还可以使用身份证号来找到他,如“420100xxxxxxxxxxxx”,这种方式就是 URN。URL 和 URN 是 URI 的子集。
6.2 URI 格式
表示指定的 URI,要使用涵盖全部必要信息的绝对 URI、绝对 URL 以及相对 URL。
绝对 URI 的格式: