1.什么是 Http 协议无状态协议?怎么解决 Http 协议无状态协议?
无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息也就是说,当客户端一次 HTTP 请求完成以后,客户端再发送一次 HTTP 请求,HTTP 并不知道当前客户端是一个”老用户“。可以使用 Cookie 来解决无状态的问题,Cookie 就相当于一个通行证,第一次访问的时候给客户端发送一个 Cookie,当客户端再次来的时候,拿着 Cookie(通行证),那么服务器就知道这个是”老用户“。
2.HTTPS 工作原理
一、首先 HTTP 请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA 加密)等进行校验;
二、客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数使用公钥进行加密(RSA 加密);
三、消息体产生的后,对它的摘要进行 MD5(或者 SHA1)算法加密,此时就得到了 RSA签名;
四、发送给服务端,此时只有服务端(RSA 私钥)能解密。
五、解密得到的随机数,再用 AES 加密,作为密钥(此时的密钥只有客户端和服务端知道)。
3.URI和URL的区别
URI,是uniform resource identifier,统-资源标识符,用来唯一的标识一 个资源。
●Web, 上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的
●URI一般由三部组成:
●①访问资源的命名机制
●②存放资源的主机名
●③资源自身的名称,由路径表示,着重强调于资源。
URL是uniform resource locator,统-资源定位器,它是一种具体的URI,即URL可以用来标识一个资 源,而且还指明了如何locate这个资源。
●URL是Internet.上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别 是著名的Mosaic。
●采用URL可以用一-种统一 -的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL- 般由三部组成:
●①协议(或称为服务方式)
●②存有该资源的主机IP地址(有时也包括端口号)
●③主机资源的具体地址。如目录和文件名等
4.Http请求报文与响应报文格式
请求报文包含四部分: .
●a、请求行:包含请求方法、URI、 HTTP版本信息
●b、请求首部字段
●C、请求内容实体
●d、空行
响应报文包含四部分:
●a、状态行:包含HTTP版本、状态码、状态码的原因短语
●b、响应首部字段
●C、响应内容实体
●d、空行
5.讲一下Http缓存
http缓存一般都是有代理服务器。比如我们打开了某个域名,那就是向这个域名发送了一个Get请求。这个请求先经过代理服务器,然后转给目标服务器。然后目标服务器返回数据。也是先经过代理服务器。关键部分了。代理服务器就会复制一份相同的资源到本机上。然后返回客户端。当客户端下一次在访问的时候。在经过代理服务器时。缓存服务器会判断。如果有缓存则直接返回缓存数据。
6.Http优化方案
●TCP复用: TCP连接复用是将多个客户端的HTTP请求复用到一个服务器端TCP连接上,而HTTP复
用则是一个客户端的多个HTTP请求通过-一个TCP连接进行处理。前者是负载均衡设备的独特功 能;而后者是HTTP 1.1协议所支持的新功能
●内容缓存:将经常用到的内容进行缓存起来,那么客户端就可以直接在内存中获取相应的数据了。
●压缩:将文本数据进行压缩,减少带宽
●SSL加速(SSL Acceleration) :使用SSL协议对HTTP协议进行加密,在通道内加密并加速
●TCP缓冲:通过采用TCP缓冲技术,可以提高服务器端响应时间和处理效率,减少由于通信链路问
题给服务器造成的连接负担。
7.Http1.1版本新特性
a、默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就- -直保持 连接,可以发送多次HTTP请求
b、管线化,客户端可以同时发出多个HTTP请求,而不用一个个等待响应
c、断点续传
。实际上就是利用HTTP消息头使用分块传输编码,将实体主体分块传输。
8.讲一下Http长连接和短连接
在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
9.http1.x 和http2.0的区别?
HTTP2.0和HTTP1.X相比的新特性
(1)新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性, 要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且 健壮。
(2)多路复用(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),同SPDY-样,HTTP2.0也具有server push功能。
10.为什么不能用两次握手进行连接?
3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序 列号在握手过程中被发送和确认。
现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组, S收 到了这个分组,并发送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答 分组在传输中被丢失的情况下,将不知道S是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种 情况下,C认为连接还未建立成功,将忽略S发来的任何数据分组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分 组。这样就形成了死锁。