这个过程有点像老板通过电话给员工下达命令。当我们在浏览器输入网址并按下回车之后,共发生了以下四件事:
1、建立连接:老板拨通手下员工的电话
2、进行请求:老板提出自己的要求
3、响应:员工应答老板的请求
4、关闭连接:挂断电话
建立连接
老板找出自己公司的总机电话号并拨通,员工接听电话的过程就是建立连接。
根据用户输入的URL地址,通过DNS、负载均衡等技术找到一台服务器,客户端与服务器的80端口建立一个TCP链接。
进行请求
电话被接通之后,老板可能要求某个具体员工来进行接听,并且会对该员工下达一些命令,比如帮他取个快递,帮他预订个酒店,帮他收购一家公司等。这个过程就进行请求(request)。
客户端向服务器发送消息,请求URL中指定的页面,要求执行指定的操作。
老板对员工下达的命令中,可以分为很多种,比如有些命令只是简单的事情询问、而有些命令则要求员工执行某些决定,如收购公司等。
同样的,HTTP的请求方法也有很多种,主要的有GET、POST、HEAD等。
响应
员工在接收到老板下单的命令后,需要对该命令做出回应。比如直接告知老板他接下来的行程,帮老板预订好酒店后告诉他已经预订成功等。这个过程就是响应(response)
服务器向客户端发送响应。响应以状态码开头。常见的状态码有:200、302、404、500等。
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
分类分类描述1**信息,服务器收到请求,需要请求者继续执行操作2**成功,操作被成功接收并处理3**重定向,需要进一步的操作以完成请求4**客户端错误,请求包含语法错误或无法完成请求5**服务器错误,服务器在处理请求的过程中发生了错误
关闭连接
老板在下达完命令,并且员工给予响应之后,双方会挂断电话。这个过程就是关闭连接。
客户端或服务端都可以关闭连接。每个请求都是用一个单独的网络连接。
特别的是:服务器不回记忆前面一次连接或者其结果,这种不记忆过去请求的协议被称为无状态(stateless)协议。
上图就是一次淘宝网的HTTP请求的过程。其中显示了request(请求)和response(响应)的所有信息。