Http
基于《尼恩:Java高并发核心编程》
一、概述
来看看几个概念点
1.1 http的组成部分
一个Http请求由三个部分组成
- 请求头:若干头部的字段,如消息正文长度、字符集等
- 请求体:一些数据如Cookie、Token以及一些客户端数据等
- 请求行:包含请求方法、URL地址、协议名称和版本号
一个Http响应由三个部分组成
- 响应头
- 响应体
- 响应行
1.2 状态码
接下来看看http的状态码有哪些
状态码 | 说明 |
---|
100-199 | (没遇到过…)成功接收请求,要求客户端继续提交下一次请求完成整个处理过程 | 200-299 | 请求成功,例如200,我也只遇到过200 | 300-399 | (没遇到过…)需要进一步细化请求 | 400-499 | 浏览器请求出现错误,例如请求资源不存在(404) | 500-599 | 后端服务器出现问题,例如SQL报错等等 |
1.3 GET和POST的区别
- 请求数据的放置位置不同:Get附在URL后,Post在请求体里
- 传输数据量大小不同:Get长度限制在URL中,Post理论上数据不受限
- 传输数据安全性不同:Get在URL明文显示,Post藏在请求体里,虽然F12也能看到
二、浅入浅出
咱就不深入浅出了,我自己都没玩明白
2.1 HTTP的2.0
版本 | 产生时间 | 内容 | 发展现状 |
---|
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.0版本是一个二进制协议,在以前1.0的时代数据传输是通过应用层的纯文本格式,然而在2.0时代引入了新的数据传输单位,分别是:帧、消息、流,2.0版本会将所有传输的信息分割为更小的消息和数据帧,它有几个特点
- 首部压缩
- 多路复用
- 并行双向传输
- 服务端推送
2.2 TCP与长连接
其实,HTTP长连接和HTTP短连接指的是传输层的TCP连接是否被多次使用
模型对比
先看看OSI七层模型
如果把它跟TCP/IP协议进行一个对比的话
OSI模型 | TCP/IP |
---|
应用层 | 应用层 | 表示层 | 👆 | 会话层 | 👆 | 传输层 | 传输层 | 网络层 | 网络层 | 数据链路层 | 链路层 | 物理层 | 👆 |
我们最常用的http、ssh、dns都是在应用层上进行处理的,并且在http报文传输中的本质过程就是数据封装和解封装的一个过程
握手与挥手
TCP三次握手过程
- 客户端:发送SYN帧打开请求传输通道
- 服务器:收到,回包进行确认
- 客户端:自身状态改变,发送ACK最终确认
- 数据传输…
TCP四次挥手过程
- 客户端或服务器:发送请求断开的报文
- 收到,并回复:我接受你的分手
- 被分手的人继续完成最后的数据发送…然后回复报文:我发送完成了,拜拜
- 最终确认,关闭连接
TCP的连接状态
可以在Linux用netstat进行查看
参数解释
2.3 长连接的配置
长连接的本质是TCP连接建立后该传输层连接不再进行释放,供应用层反复使用 ,如果客户端在首部加上Connection:Keep-Alive请求头,表示请求服务端将传输层TCP连接保持在打开状态;如果服务端同意将这条TCP连接保持在打开状态,就会在HTTP响应中包含同样的首部
那么,怎么配置长连接呢?
独立部署Tomcat
修改apache-tomcat-8.5.69\conf\server.xml文件中的Connector(连接器)的配置,死命写参数
SpringBoot内嵌式Tomcat
可以通过配置TomcatServletWebServerFactory容器工厂Bean实例
Nginx长连接配置
去修改那个conf文件
设计原则
连接不是时间越久越好,需要看单个用户在单位时间内的请求次数而定
2.4 ApacheHttpClient长连接技术
以后再补充
三、WebSocket
简单描述,是一个全双工的持久双向连接,客户端和服务器可以向对方主动发送和接收数据
不学了先。。。
四、HTTPS
很好理解,HTTP不安全,所以引入了HTTPS,引入安全通道和密钥机制,在HTTP的基础上加入了SSL/TLS协议,TLS是传输层加密协议,前身是SSL协议
4.1 什么是SSL/TLS
1
4.2 以后再说
1
over
|