http0.9只有get请求,没有请求头,只传输文本,响应后直接关闭
http1.0任何格式的内容都可以发送。这使得互联网不仅可以传输文字,还能传输图像、视频、二进制文件。这为互联网的大发展奠定了基础。
每次通信都必须包括头信息(HTTP header),用来描述一些元数据。
1.http1.0和http1.1区别
HTTP1.0、HTTP1.1 和 HTTP2.0 的区别 - _浪潮之巅.☆ - 博客园
a.节约带宽,1.1支持只传header,
b.长连接,1.1默认开启长连接,可以复用连接减少不必要的三次握手四次挥手
c.支持host域,一台物理机可以有多个宿主机,HTTP1.1的请求消息和响应消息都支持host域(主机名),HTTP1.0只对应机器ip
d.错误通知管理,HTTP1.1中新增了24个错误状态响应码
e.缓存处理,HTTP1.1中增加更多缓存策略
2.http1.1和2.2区别
a.多路复用,同一个连接并发处理多个请求
b.头部数据压缩,状态行和头部使用HPACK算法压缩
c.服务器推送,采用了SPDY的网页,例如我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了
3.半连接队列,全连接队列
半连接队列(syns队列),三次握手第一次syn时,服务端把内容放到半连接队列,队列大小取决于长连接最大大小和os级别的系统参数(/proc/sys/net/ipv4/tcp_max_syn_backlog)
全连接队列(accept队列),三次握手第二次ack时,服务端吧内容放到长连接队列,队列大小取决于os级别的系统参数(内核会根据传入的backlog
参数与系统参数somaxconn,取二者的较小值)
出问题:
[root@server ~]# date; netstat -s | egrep “listen|LISTEN”
Fri May 5 15:39:58 CST 2017
1641685 times the listen queue of a socket overflowed 全连接溢出次数
1641685 SYNs to LISTEN sockets ignored 半连接溢出次数
4.http长连接优缺点
优点:
1、减少CPU及内存的使用
2、Pipelining,多个http放到一个tcp,一一请求,不需要等待响应,发送下一个请求
3、减少网络的堵塞
4、减少后续请求的响应时间
缺点:
1.可能会影响性能,apache的长连接时间的长短
5.长连接是怎么实现的
httpclient如何实现连接池, 连接池主要是管理连接数量,路由连接数量
连接池维护在大连接池和小连接池里,大连接池维护不同路由的连接信息,大池子其中一条维护其中一个路由的不同连接信息为小池子,
value是每个路由对应的连接信息,超出连接数量放入阻塞队列当中,过期后消失
https://www.cnblogs.com/tianshifu/p/7840963.html
https://blog.csdn.net/x763795151/article/details/92696684
tcp本身实现长连接:Connection:keep-alive,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,有一个保持时间,TTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
http1.0请求与服务端的交互过程:
a)客户端发出带有包含一个header:”Connection: keep-alive“的请求
b)服务端接收到这个请求后,根据http1.0和”Connection: keep-alive“判断出这是一个长连接,就会在response的header中也增加”Connection: keep-alive“,同是不会关闭已建立的tcp连接.
c)客户端收到服务端的response后,发现其中包含”Connection: keep-alive“,就认为是一个长连接,不关闭这个连接。
http1.1请求与服务端的交互过程:
a)客户端发出http1.1的请求
b)服务端收到http1.1后就认为这是一个长连接,会在返回的response设置Connection: keep-alive,同时不会关闭已建立的连接.
c)客户端收到服务端的response后,发现其中包含”Connection: keep-alive“,就认为是一个长连接,不关闭这个连接。
6.网络分层
7.https通讯过程
客户端请求服务端时,服务端吧证书(证书里有公钥)发送给客户端,客户端接到证书验证证书有效性,
拿着公钥把随机数加密给服务端,服务端使用私钥解密随机数生成秘钥,之后使用此秘钥和客户端交互,对称加解密。
对称和非对称加密算法,为什么先用非对称加密,再用对称加密
非对称加密适合单向,且效率低,存在大量交互需要使用对称加密
首先:非对称加密的加解密效率是非常低的,而 http 的应用场景中通常端与端之间存在大量的交互,非对称加密的效率是无法接受的。
另外:在 HTTPS 的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密
证书被拦截可能吗:不可能
证书里包含了网站A的信息,包括域名,浏览器把证书里的域名与自己请求的域名比对一下就知道有没有被掉包了