http和https问题汇总
1. http与https工作方式
- http包含如下动作:
① 浏览器打开一个TCP连接;
② 浏览器发送HTTP请求到服务器;
③ 服务器发送HTTP回应信息到服务器;
④ TCP连接关闭
- SSL包含如下动作:
① 验证服务器端;
② 允许客户端和服务器端选择加密算法和密码,确保双方都支持;
③ 验证客户端;
④ 使用公钥加密技术来生成共享加密数据;
⑤ 创建一个加密的SSL连接;
⑥ 基于该SSL连接传递HTTP请求;
2、http协议,http和https的区别
HTTP和HTTPS的基本概念
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
3、HTTPS和HTTP的区别
HTTPS和HTTP的区别主要如下:
- https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
- 在OSI模型中,HTTP工作于应用层,而HTTPS工作于传输层;
4、http状态码
- 1XX 信息码,服务器收到请求,需要请求者继续执行操作;
- 2XX 成功码,操作被成功接收并处理;
- 3XX 重定向,需要进一步的操作以完成请求;
- 4XX 客户端错误,请求包含语法错误或无法完成请求;
- 5XX 服务器错误,服务器在处理请求的过程中发生了错误
404 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
5、HTTP1.0与HTTP1.1的区别?
-
HTTP1.0需要使用keep-alive参数来告知服务器要建立一个长连接,而HTTP1.1默认支持长连接;
-
HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401;
-
HTTP1.0是没有host域的,HTTP1.1才支持这个参数;
6、HTTP2.0和HTTP1.X的区别
1.新的二进制格式(Binary Format):
HTTP1.x的解析是基于文本。(文本的表现形式有多样性,要考虑的场景很多才能做到健壮性)
基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
2.HTTP2.0比HTTP1.0有路复用(MultiPlexing):
即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
3.header压缩:
HTTP1.x的header带有大量信息,而且每次都要重复发送,
HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
4.服务端推送(server push):
HTTP2.0也具有server push功能。
补充:
最早http建立的连接无法复用,就是一次数据传输之后立即断开,后来使用keep-alive保活。但是请求只有在服务应答之后才能发送后续请求在客户端形成阻塞。后来使用管道化http pipeling技术,使得客户端可以一次发送多个请求,但是对于服务端的第一个资源无法返回的时候,也会形成服务端阻塞。虽然可以服务端和客户端建立多个连接,但是也需要多次3次握手。
http1.x的问题在于:
1、线头阻塞问题:无论是服务端还有客户端都会有请求资源的阻塞问题。
2、冗余头部字段:http1.x的头部都采用文本格式,未压缩,并且每次都会发送重复的字段。
3、只有客户端发送请求,服务方才会应答。
http2.x改进:
1、采用二进制协议编码,传输的是二进制格式传输数据。响应分为header和data两个帧。
2、头部字段会保存在客户端和服务端,动态添加,避免重复发送。
3、多路复用:支持多个请求在一个连接中完成,也不会由因为某个包的延迟而导致整体链路的阻塞。
4、服务端会主动根据请求分析,客户端是否需要其他资源,主动发送。