石头人面试HTTP之http协议2.0/SPDY

前言

小伙伴们在面试过程当中会遇到一些HTTP/网络TCP/IP相关问题web

我大概收集整理了下面试

  1. http1.1时如何复用Tcp链接
  2. 经过什么作到并发请求
  3. 介绍Http2.0
  4. 一个 TCP 链接能够对应几个 HTTP 请求

这些问题咱们均可以在如下文章中找到答案缓存

http存在问题

  1. 无状态协议服务器

    解决:cookiewebsocket

  2. 每次请求,从新链接,增长开销cookie

    解决:keep-alive网络

  3. 一条链接只能发一个请求并发

    解决:管线化负载均衡

  4. 请求只能从客户端开始socket

    解决:SPDY/comet/websocket

  5. 请求/响应首部未压缩 解决:SPDY

SPDY

为了提升http性能 SPDY以会话层形式加入 HTTP —> SPDY(会话层) -> SSL -> TCP ... 实现如下功能

  1. 多路复用(一个TCP连接能够处理多个http请求)
  2. 请求赋予优先级
  3. 压缩http首部
  4. 服务端推送 (可主动给客户端推送数据)
  5. 服务端提示 (可提示客户端请求资源)

keep-alive(持久化连接)

利用 tcp 握手挥手 任意一端没有提出断开,则保持链接状态 一个TCP连接能够处理多个http请求

管线化(请求并发)

依赖持久化连接 管线化技术 可实现并发请求

多个HTTP请求发送能够一块儿发送

cookie(状态管理)

根据 从 服务器端发送的响应报文 set-cookie 首部字段信息,通知客户端保存 cookie 客户端再次请求时,自动在请求报文中加入cookie发出

comet

服务器端有更新,不会等待请求,而是直接返回响应,延迟应答模式

客户端请求,服务端响应挂起,有内容更新时返回,

缺点:为了保留响应,一次链接时间变长,消耗资源

websocket

服务端和客户端创建通讯链接,以后可互相发送数据

本文重点不在websocket,不会详细讲解

http2.0

改善用户使用web速度体验,基于 SPDY 设计

http1.1 存在问题

  1. 队头堵塞

http1.1即使是经过管道同时发送了多个请求,服务端也是按请求的顺序依次给出响应的;而客户端在未收到以前所发出全部请求的响应以前,将会阻塞后面的请求(排队等待),这称为"队头堵塞"

解决 : 多路复用

多路复用

http2.0虽然依然遵循请求-响应模式,但客户端发送多个请求和服务端给出多个响应的顺序不受限制,这样既避免了"队头堵塞",又能更快获取响应。在复用同一个TCP链接时,服务器同时(或前后)收到了A、B两个请求,先回应A请求,但因为处理过程很是耗时,因而就发送A请求已经处理好的部分, 接着回应B请求,完成后,再发送A请求剩下的部分

二进制格式

HTTP1.x 采用文本格式

HTTP2.0 采用二进制格式

方便且健壮

header 压缩

基于 SPDY

服务端推送

基于 SPDY

负载均衡优化HTTP

TCP链接复用

TCP链接复用是将多个客户端的HTTP请求复用到一个服务器端TCP链接上:

主要利用负载均衡 技术,

  1. 客户端请求,
  2. 负载均衡设备收到请求后,检测服务器是否存在空闲长连接,不存在则服务器创建新连接,
  3. http响应完成后,负载均衡设备和客户端之间关闭连接,但和服务器保持连接,
  4. 其余客户端发送http请求时,可直接使用这个空闲连接,避免新建tcp连接

下一章

石头人面试HTTP之请求&响应&缓存

相关文章
相关标签/搜索