1. 版本发展史?
-
http0.9
-
超文本传输协议(HTTP)的第一个版本,主要发展于1991年,并在当时主要用于学术交流。这个版本的需求非常简单,主要用于在网络之间传递HTML超文本的内容。
-
局限性
-
只允许客户端发送GET请求且不支持请求头和响应头因此,服务器只能返回纯文本内容,无法支持其他类型的文件(如图片、音频、视频等)。
-
无状态每个事务独立进行处理,事务结束时就释放这个连接。
-
-
-
http1.0
-
持更多的文件类型,如JavaScript、CSS、图片、音频、视频等。同时,它也支持多种编码格式,而不仅仅是ASCII编码。
-
引入Cache机制用来缓存已经下载过的数据,以减轻服务器的压力。
-
局限性
-
无状态、无连接的协议每次发送请求/返回响应都需要进行一次TCP连接,这使得网络利用率变低。同时,HTTP/1.0存在队头阻塞的问题,即下一个请求必须在前一个请求响应到达之后才能发送。
-
-
-
http1.1:
-
引入了持久连接(Persistent Connection)的概念,允许一个TCP连接上进行多个HTTP请求和响应,从而提高了网络的使用效率。
-
引入了管道化(pipelining)技术,允许客户端同时发送多个请求,而不需要等待前一个请求的响应。但是,服务器仍然需要按照请求的顺序进行响应,因此仍然存在队头阻塞的问题。
-
提供了更多的请求方法(如PUT、DELETE、OPTIONS、PATCH等)、更丰富的请求头和响应头,以及更完善的缓存机制等。这些特性使得HTTP/1.1能够更好地满足Web应用的需求。
-
新增了一些缓存的字段(If-Modified-Since, If-None-Match)
-
请求头中引入了 range 字段,支持断点续传
-
允许响应数据分块(chunked),利于传输大文件
-
-
http2.0
参考文献:HTTP 2.0有什么新特性 - 知乎
-
二进制分帧:请求信息全部放到帧里面传递到服务器不会和http1.1一样采用一应一答的方式而是会采用在应用层 和 传输层增加二进制分帧层。
-
多路复用: http2.0 同时并行交错发送请求,并且无需等待请求是否返回数据,第一次的信息如果和后面帧中的信息一致就可以复用帧。
-
首部压缩 :引入了HPACK算法进行头部压缩,这大大减小了头部信息的大小,提高了性能和效率。
-
流量控制:引入了流量控制机制防止客户端或服务器端接收数据过快而无法处理的情况。
-
请求优先级:允许客户端指定或重新指定引用资源的优先级。
-
服务器推送:允许服务器主动向客户端推送资源,而无需等待客户端的显式请求。
-
-
http3.0(QUIC)
-
http协议的历史性革命性大改版,将底层TCP协议改为UDP,彻底解决队头阻塞问题。但是目前兼容性还不行,不能大规模使用。
-
非对称秘钥:非对称加密算法需要两个密钥:公开秘钥(publickey)和私有密钥(privatekey)
-
2. https加密方式?
-
基本加密:base64、MD5
-
对称加密(一个密钥,这个密钥将用于加密和解密数据)
-
AES:【AES的块大小固定为128位,密钥长度则可以是128位、192位或256位】
-
DES:对称密钥加密又叫专用密钥加密,即发送和接收数据的双方必使用相同的密钥对明文进行加密和解密运算。通常有两种模式:流加密和分组加密。
-
-
非对称加密(通过公钥对数据进行加密,只有用对应的私钥才能解密)
-
RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)
-
-
国密SM2加密算法(了解即可)
3. http和https的区别
-
HTTPS是在HTTP基础上添加了SSL/TLS协议,用于对数据进行加密传输的协议。HTTPS和HTTP的主要区别在于安全性和加密方式。
HTTPS相比HTTP具有以下特点:
加密传输:HTTPS采用SSL/TLS协议对数据进行加密传输,保证数据传输过程中的机密性和完整性,防止数据被窃听、篡改和伪造。
安全认证:HTTPS使用数字证书对网站进行认证,确保连接的合法性和真实性,防止中间人攻击等安全问题。
运行速度:由于HTTPS需要进行加密解密等额外的运算,因此会比HTTP略慢一些,但现代的硬件和软件已经足够支持HTTPS的稳定高效运行。
4. Tcp协议
-
三次握手 第1次握手:客户端发送一个带有SYN(synchronize)标志的数据包给服务端; 第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了; 第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。 其中:SYN标志位数置1,表示建立TCP连接;ACK标志表示验证字段。
三次握手过程详细说明:
-
客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值);
-
服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接;
-
客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)。
-
四次挥手原理: 第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态; 第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态; 第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态; 第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。 其中:FIN标志位数置1,表示断开TCP连接。
四次挥手过程详细说明:
-
客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的 FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成);
-
服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成);
-
服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成);
-
客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成) 至此TCP断开的4次挥手过程完毕。
5. http常见的状态码有哪些?
-
100:请求已接收,需要继续处理
-
200:请求成功
-
301:永久重定向(访问一个网页资源但是并没有访问到 而是去了其他的地方)
-
302:临时重定向(会在某种情况下进行重定向)
-
304:使用缓存资源(本来想要从服务器访问某个资源 但是现在浏览器重定向到缓存里面取出)
-
305:使用代理(想要访问一个资源服务器 但是这个服务器不允许直接访问 需要找到代理它的服务器间接
-
400: 请求报错
-
401:未授权,请先登录
-
403:没有权限,拒绝访问
-
404:请求地址错误
-
500:服务器内部错误
-
501:服务正在部署
-
502:网关错误
-
504:请求超时
-
505:http版本不受支持
6. https是否绝对安全?
不是绝对安全,一下五点都涉及到安全漏洞
-
端点安全:
https
只保护数据在传输过程中的安全性。如果服务器或客户端本身存在安全漏洞(如未修补的软件漏洞、弱密码等),那么数据仍可能面临风险。 -
中间人攻击:虽然
https
提供了身份验证的功能,但恶意攻击者仍可能使用中间人攻击(MITM)来拦截和篡改通信。这通常涉及到获取并滥用有效的SSL/TLS证书。 -
内容安全性:
https
并不验证或保护传输的内容本身。这意味着恶意的网页内容(如恶意软件、钓鱼攻击等)仍可能通过https
进行传输。 -
弱加密算法或配置:如果服务器或客户端使用了过时的或弱的加密算法或配置,那么
https
连接的安全性可能会受到影响。 -
物理攻击:在某些情况下,物理攻击(如恶意人员直接访问服务器或客户端设备)可能绕过
https
提供的保护。
7. HTTPS和HTTP的默认端口分别是什么?
-
http:默认端口80
-
https:默认端口443
8. 什么是websocket?
WebSocket是HTML5出的东西(协议)。 首先HTTP有1.1和1.0之说,也就是所谓的keep-alive,把多个HTTP请求合并为一个,但是Websocket其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,HTTP的生命周期通过Request来界定,也就是一个Request 一个Response,那么在HTTP1.0中,这次HTTP请求就结束了。 在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。 但是请记住 Request = Response , 在HTTP中永远是这样,也就是说一个request只能有一个response。而且这个response也是被动的,不能主动发起。
WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。
它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。WebSocket 允许服务器端与客户端进行全双工(full-duplex)的通信。举例来说,HTTP 协议有点像发电子邮件,发出后必须等待对方回信;WebSocket 则是像打电话,服务器端和客户端可以同时向对方发送数据,它们之间存着一条持续打开的数据通道。