HTTP 超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
版本 |
产生时间 |
内容 |
发展现状 |
HTTP/0.9 |
1991年 |
不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 |
没有作为正式的标准 |
HTTP/1.0 |
1996年 |
短链接,传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令 |
正式作为标准 |
HTTP/1.1 |
1997年 |
持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 |
2015年前使用最广泛 |
HTTP/2 |
2015年 |
多路复用、服务器推送、头信息压缩、二进制协议等 |
逐渐覆盖市场 |
多路复用:通过单一的HTTP/2连接请求发起多重的请求-响应消息,多个请求stream共享一个TCP连接,实现多流并行而不是依赖建立多个TCP连接。
HTTP 协议报文格式:
HTTP 协议特点:
- 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
- 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
- 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
- 简单快速、灵活
- 通信使用明文传输数据、请求和响应不会对通信方进行确认、无法保护数据的完整性
针对无状态的一些解决策略:
- 通过Cookie/Session技术
- HTTP/1.1持久连接(HTTP keep-alive)方法,只要任意一端没有明确提出断开连接,则保持TCP连接状态,在请求首部字段中的Connection: keep-alive即为表明使用了持久连接
客户端输入URL回车,DNS解析域名得到服务器的IP地址,服务器在80端口监听客户端请求,端口通过TCP/IP协议(可以通过Socket实现)建立连接。HTTP属于TCP/IP模型中的运用层协议,所以通信的过程其实是对应数据的入栈和出栈。
报文从运用层传送到运输层,运输层通过TCP三次握手和服务器建立连接,四次挥手释放连接。