一. HTTP协议的介绍
HTTP协议是一个简单的请求——响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。
HTTP是一种协议规范,这种规范记录在文档上,为真正通过HTTP进行通信的HTTP的实现程序。
HTTP是基于TCP协议,且面向连接的。典型的HTTP事务处理有如下的过程:
- 客户端与服务器建立连接;
- 客户端向服务器提出请求;
- 服务器接受请求,并根据请求返回相应的数据作为应答响应;
- 客户端与服务器关闭连接。
二.HTTP协议的格式
HTTP报文由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Respone)构成
请求行(方法名 URL 协议版本)/状态行(协议版本 状态码 状态码描述)
请求头/响应头
请求体/响应体
常见HTTP响应状态码汇总
200 OK :
客户端请求成功
3XX系列
301 Moved Permanently :请求的资源以被永久的移动到新URL中,返回的Response中包含一个Location,浏览器会自动重定向到新URL,以后请求都会被新的URL替代 302 Found :与301类似,但请求的资源只是临时的被移动到新的URL中,下次请求客户端继续使用原URL 307 Temporary Redirect : 临时重定向,类似于302,使用GET请求重定向
4XX系列
400 Bad Request : 客户端请求语法错误,服务器无法理解(在 ajax 请求后台数据时比较常见) 401 Unauthorized :请求要求用户的身份认证 403 Forbidden : 服务器理解客户端请求,但是拒绝执行(一般用于用户级别为达到要求等等不支持访问) 404 Not Found : 服务器无法根据客户端请求找到对应资源 405 Method Not Allowed : 服务器不支持该方法
5XX系列
500 Internal Server Error : 服务器内部错误,无法完成请求 503 Service Unavailable :由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
三.HTTP协议的特点
- 支持服务器/客户端模式
- 传输较快速,客户端向服务器发送请求,只需要传输请求方法和路径
- 灵活,HTTP允许传输任意类型的数据对象
- 无连接,每次连接只能处理一个请求,服务器处理完客户端请求,客户端收到响应后就断开连接
- 无状态,协议本身对事务处理没有记忆能力,如果后序连接需要之前发送的信息时就需要重传
四.应用层网络协议比较:
- HTTP1: 队头阻塞(基于TCP的顺序传输弊端)、传输效率低(无用信息多,不支持多路复用)、明文传输不安全
- HTTP2: 多路复用、头部压缩、二进制协议 拓展:
- websocket:全双工通信,服务端可主动向客户端发送信息
- QUIC: 基于UDP实现、解决队头阻塞、加密减少握手次数、支持快速启动