HTTP 的工作流程
1. 客户端和服务器建立链接
建立链接的主要步骤叫做 三次握手
a. 客户端发送一个消息给到服务端
b 服务端回给客户端一个消息
c 客户端再回给服务端一个消息
2. 建立链接后,发送一个请求给服务器(请求)
每一个请求都要把我们的所有信息都包含请求
每一个请求都会有一个 请求报文
在 请求报文 中会包含我们所有的请求信息(也就是我们要和服务端说的话都在里面)
我们的请求报文中会包含几个东西:
1、请求行
2、请求头(请求头都是键值对的形式出现的)
3、请求空行(请求头和请求主体之间要留一个空白行)
4、请求体(本次请求携带的数据,只有post有请求体,get没有)
完整案例:
POST /user HTTP/1.1 # 请求行
Host: www.user.com
Content-Type: application/x-www-form-urlencoded
accept: application/json
User-agent: Mozilla/5.0. # 以上是首部
#(此处必须有一空行) # 空行分割header和请求内容
name=world # 请求体
3. 服务器接受到请求以后进行相应的处理并给出一个回应(响应)• 客户端的请求发送到服务端以后
服务端进行对应的处理
会给我们返回一个响应
每一个响应都会有一个 响应报文
在 响应报文 中会包含我们所有的响应信息(也就是服务端在接受到客户端请求以后,给我们的回信)
我们的 响应报文 中会包含几个信息
a. 状态行
HTTP/1.1 200 OK
HTTP/1.1 服务器使用的 HTTP 协议版本
# 200 响应状态码
# OK 对响应状态码的简单解释
b. 响应头
Date: Jan, 14 Aug 2019 12:42:30 GMT # 服务器时间
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45 # 服务器类型
Content-Type: text/html # 服务端给客户端的数据类型
Content-Length: 11 # 服务端给客户端的数据长度
c. 响应体
hello world
服务端给客户端的响应数据
4. 断开于服务器的链接
• 之前我们的建立链接是基于 TCP/IP 协议的 三次握手
• 我们的断开链接是基于 TCP/IP 协议的 四次挥手
a. 客户端发送一个我要断开的消息给服务端
b. 服务端接受到以后发送一个消息告诉客户端我已经进入关闭等待状态
c. 服务端再次发送一个消息告诉客户端,这个是我的最后一次消息给你,当我再接受到消息的时候就会关闭
d. 客户端接受到服务端的消息以后,告诉服务器,我已经关闭,这个是给你的最后一个消息
注:
HTTP协议永远都是客户端发起请求,服务器回送响应。这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。
—HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。