1、http是什么?
答:http【协议】是客户端和服务器【交互】的一种通讯格式。所谓的【协议】实际上就是双方约定好的【格式】,让双方都能看得懂的东西而已。所谓的交互实际上就是【请求】和【响应】。
2、http各个版本之间的区别?
答:http1.0默认是短连接,每次与服务器交互,都需要新开一个连接。
http1.1版本最主要的是【默认持久连接】,只要客户端服务端没有断开TCP连接,就一直保持连接,可以发送多次http请求。其次就是【断点传续】(Chunked transfer-coding),利用http消息头使用分块传输编码,将实体主体分块进行传输。
http/2不再以文本的方式传输,采用【二进制分帧层】,对头部进行了【压缩】,支持【控流】,最主要就是http/2是支持【多路复用】的(通过单一的TCP连接「并行」发起多个的请求和响应消息)
问:http1.1版本有个管线化(pipelining)理论,但默认是关闭的。管线化这个跟http/2的【多路复用】是很类似的,他们有什么区别?
答:http1.1提出的【管线化】只能【串行】(一个响应必须完全返回后,下一个请求才会开始传输),http/2多路复用则是利用【分帧】数据流,把http协议分解为【互不依赖】的帧(为每个帧「标序」发送,接收回来的时候按序重组),进而可以【乱序】发送避免【一定程度上】的队首阻塞问题
问:但是无论是http1.1还是http/2,reponse相应的【处理顺序】总是需要跟request请求顺序保持一致的。假如某个请求的response请求响应慢了,还是同样会有阻塞问题。
答:这受限于http底层的传输协议是tcp,没有办法完全解决【线头阻塞】的问题。
答:http/3跟前面版本最大的区别就是:http1.x和http/2底层都是tcp,而http/3底层是udp。使用http/3能够减少rtt【往返时延】(tcp三次握手,tls握手)
问:https的过程是怎样的?
答:https就是【安全】的http协议(客户端与服务端的传输链路中进行加密)
答:https首先要解决的是:认证的问题。客户端是需要确切的知道服务端是不是【真实】的,所以在https中会有一个角色:CA(公信机构)。服务端在使用https之前,需要去认证的CA机构申请一份【数字证书】。数字证书里包含有证书持有者、证书有效期、【服务器公钥】等信息。CA机构也有自己的一份【公私钥】,在发布数字证书之前,会用自己的【私钥】对这份数字证书进行加密。等到客户端请求服务器的时候,服务端返回证书给客户端。客户端用CA的公钥对证书解密(因为CA是公信机构,会内置到浏览器或操作系统中,所以客户端会有公钥)。这个时候,客户端会判断这个【证书是否可信/有无被篡改】。私钥加密,公钥解密我们叫做【数字签名】(这种方式可以查看有无被篡改)。到这里就解决了【认证】的问题,至少客户端能保证是跟【真实的服务器】进行通信。
答:解决了【认证】的问题之后,就要解决【保密】的问题,客户端与服务器的通讯内容在传输中不会泄露给第三方。客户端从CA拿到数字证书后,就能拿到服务端的公钥。客户端生成一个key作为【对称加密】的密钥,用服务端的【公钥加密】传输给服务端。服务端用自己的【私钥解密】客户端的数据,得到对称加密的密钥。之后客户端与服务端就可以使用【对称加密的密钥】发送和接收消息了。