细说HTTP协议及其工作流程

在TCP/IP的模型图中 , 读者可以看到 , HTTP协议位于最上层的应用层 , 它是互联网上应用最为广泛的一种网络协议 , 所有的WWW文件都必须遵守这个协议 。
HTTP是一个由请求和响应组成的、标准的客户端/服务器端模型(B/S结构) 。HTTP协议永远是由客户端发起请求 , 服务器端给予响应 , 如图2-8所示 。

细说HTTP协议及其工作流程

文章插图
 
 
图2-8 HTTP请求
HTTP是一种无状态协议 。无状态是指客户端和服务器端之间不需要建立持久的连接 , 客户端发起一个请求 , 服务器端返回响应 , 这个连接就会被关闭 , 在服务器端不会保留该请求的有关信息 。
HTTP的工作流程如下 。
1.地址解析
HTTP协议是通过标准URL来请求指定的服务器中的指定服务的 。一个标准的URL如下:
http://www.baidu.com:80/index.html?name=tom&age=18
下面来拆分一下URL , 看看这些组成都是做什么的:
(1)http:协议类型 。这里指的是要发送的是什么协议 , 还可以是FTP等其他协议 。而这里请求的是服务器中的网页 , 所以使用的是常见的HTTP协议 。
(2)www.baidu.com:主机名 。通过主机名 , 可以准确定位到要访问的那台服务器 。而在前面说的网络通信中 , IP是可以唯一表示服务器地址的 , 但IP烦琐复杂 , 很难记忆 , 所以人们就想了个办法 , 通过熟悉的英文、数字等来表示一台服务器的地址 , 称为域名 。这样就需要一个文件(作为一个数据仓库)把IP和域名一一对应起来 。在很早的时候 , 我们确实是这么做的 , 不过随着IP越来越多 , 文件也变得越来越大 , 不堪负重 。于是人们就想到了把这些一一对应的关系都放到一台统一的服务器上 , 这台服务器被称为DNS域名解析系统 , 它会把域名解析成对应的IP 。
(3)80:端口号 。用户已经可以通过域名或者IP访问到一台服务器了 , 但是一台服务器里有那么多的服务和应用 , 怎样才能准确找到用户需要访问的那个服务或应用呢?在服务器中 , 每个服务和应用都会开启一个进程 , 都会有一个进程号(PID) , 如果对外提供服务 , 则还会有一个唯一的端口号 , 这让外部应用可以直接通过这个端口号访问到指定的服务和应用 。端口号的范围是0~65 535 , 一些常用的服务和应用都有默认的端口号 , 一般不能轻易更改 , 比如Web服务器的80端口、远程连接SSH服务的22端口、数据库MySQL的3306端口等等 。因为80端口是Web服务器的默认端口 , 所以在写HTTP请求的URL的时候 , 80端口一般是省略的 。
(4)index.html:请求的文件名 。用户通过域名和端口号已经能访问到Web服务器了 , 接下来就可以通过文件名来访问指定的文件了 。Web服务器一般都做好了路由 , 不同的路由所提供的访问文件的形式可能不一样 , 但核心都是一样的 。
(5)?name=tom&age=18:请求参数 。即使同一个网页 , 可能针对不同的用户 , 服务器要返回给客户端的信息也是不一样的 。而服务器就是通过URL中“?”后面携带的参数不同来响应不同的用户或者同一个用户的不同请求的 。
 
2.封装HTTP请求
这一步会把上面写的URL以及本机的一些信息封装成一个HTTP请求数据包 , 后面笔者会详细说明 。
3.封装TCP包
第三步就是封装TCP包 , 建立TCP连接 , 也就是常说的“三次握手” 。由于HTTP位于最上层的应用层 , 所以HTTP在工作之前要先由TCP和IP协议建立网络连接 , 这就是TCP/IP协议族 , 因此互联网又被称为TCP/IP网络 。
【细说HTTP协议及其工作流程】这里介绍一下TCP/IP协议的“三次握手” 。首先由客户端发送建立连接的请求 , 客户端发送一个syn包 , 等待服务器端的响应;服务器端收到SYN包之后 , 返回给客户端一个表示确认的SYN包;最后客户端收到确认SYN包之后向服务器端发送ACK包 , 发送完之后开始建立连接 , 如图2-9所示 。
细说HTTP协议及其工作流程


推荐阅读