面试题答案
一键面试HTTP/2服务器推送功能基本原理
- 主动推送:在HTTP/2协议中,服务器可以在客户端明确请求之前,主动向客户端推送资源。例如,当客户端请求一个HTML页面时,服务器知道该页面可能还需要加载相关的CSS、JavaScript文件等,服务器可以直接将这些资源推送给客户端,而无需客户端再次发起请求。
- 基于流:HTTP/2采用二进制分帧层,将每个请求和响应分割为更小的帧,并通过流(Stream)来管理这些帧。服务器推送也是基于流来实现的,每个推送操作都对应一个独立的流。服务器在推送资源时,会创建一个新的流,并在这个流上发送相关的帧,其中包含推送资源的内容。
- 首部信息:服务器推送时,会在推送流的首部信息中包含被推送资源的相关元数据,如资源的路径、类型等。客户端可以根据这些首部信息来判断如何处理接收到的推送资源。同时,首部信息中还会包含一些指示该流是推送流的标识。
- 客户端反馈:客户端在接收到服务器推送的资源后,可以选择接受并使用这些资源,也可以选择忽略。如果客户端选择接受,它会在接收到推送资源后,通过发送RST_STREAM帧或其他控制帧来告知服务器其对推送资源的处理情况。如果客户端已经缓存了相同的资源,可能会通知服务器停止推送。
与传统HTTP请求 - 响应模式的主要区别
- 主动性:
- 传统HTTP:客户端发起请求,服务器根据请求返回响应,整个过程是被动的。只有当客户端明确发出请求,服务器才会返回相应资源,服务器不会主动向客户端发送未请求的资源。
- HTTP/2服务器推送:服务器具有主动性,可以提前预判客户端可能需要的资源并主动推送,减少客户端后续请求次数,加快页面加载速度。
- 资源加载顺序:
- 传统HTTP:客户端按照顺序依次发起请求,每个请求等待响应完成后再发起下一个请求(在不考虑并发请求的情况下)。例如,先请求HTML页面,解析HTML时发现需要CSS和JavaScript文件,再分别发起对这些文件的请求。
- HTTP/2服务器推送:服务器可以打乱资源的加载顺序,提前推送可能需要的资源,使客户端可以并行处理多个资源的加载,优化整体的加载性能。
- 网络交互次数:
- 传统HTTP:对于一个包含多个资源的页面,客户端需要多次与服务器进行交互,每次请求对应一个响应,导致较多的网络往返次数。
- HTTP/2服务器推送:通过服务器主动推送,减少了客户端为获取多个相关资源而发起的请求次数,从而减少网络往返,降低延迟,提高了网络效率。
- 缓存处理:
- 传统HTTP:客户端根据自身的缓存策略决定是否使用本地缓存,每次请求时可能会检查缓存有效性。如果缓存过期,需要重新从服务器获取资源。
- HTTP/2服务器推送:客户端在接收到推送资源后,也会按照缓存策略处理。但由于服务器推送的资源可能是客户端未主动请求的,客户端可能需要根据推送首部中的信息来更准确地判断是否缓存以及如何缓存这些资源。同时,服务器在推送时也需要考虑客户端已有的缓存情况,避免重复推送已缓存的资源。