HTTP2_特性:
- 二进制传输
在之前的 http1.x 中,是通过 文本传输 的,http2 中所有的传输数据都会被分割,并采用 二进制编码。
- 多路复用
- 在 HTTP2 中有两个概念,流 (stream) 和 帧 (frame) 。帧是最小单位,每个帧都会有 Stream Identifier 来标记它属于哪个流。
- 在 http1.x 中,每个 HTTP 请求会建立一个 TCP 连接,也就意味着每个请求都要进行三次握手,这会造成时间和资源上的浪费,而且浏览器会限制同一域名下并发请求的个数,当请求很多资源时,队头阻塞 会导致在达到最大请求数量时,剩余的资源要等待其他资源请求完成后才会发起请求。
- 在 http2 中,所有请求都会公用一个 TCP 连接,就可以传输所有的数据。这就解决了浏览器同一域名请求数量的问题,也解决了每开一个 tcp 连接都会造成的资源浪费。
- 同一个 tcp 连接下多个 http 请求,如何保证传输不出错呢 ?
多路复用,就是在一个 TCP 连接中可以存在多个流,每个流对应一个请求,包含多个帧。通过 Stream Identifier 就可以识别出每个帧对应的流。当帧到达服务端之后,就可以根据 Stream Idemtifier 来重新组合得到完整的请求了。这就在提高传输性能的同时保证了传输的正确性。
- header 压缩
http2 中,使用了 HPACK 压缩格式,对 header 进行了编码,减少了 header 的大小,大概原理就是服务端和客户端共同维护一个静态词典,用于记录出现过的 header, 后面在传输过程中发送端直接传输记录的键名,接收端就可以通过键名找到相应的值。
- 服务端 push
在 http2 中,服务端可以在客户端的某个请求后,根据这个请求,主动推送其他资源到客户端。
- HTTP 有哪些请求方法 ?
HTTP1.1 中定义的请求方法有 8 种:GET,POST,PUT,DELETE,PATCH,HEAD,OPTIONS,TRACE。最常用的两种是 GET 和 POST,如果是 Restful 接口的话一般会用到 GET,POST,PUT,DELETE。
方法详解:
- OPTIONS:返回服务器针对特定资源所 支持的 HTTP 请求方法,也可以利用 web 服务器发送*的请求头来测试服务器的功能性。
- HEAD:向服务器索于 GET 请求相一致的响应,只不过 响应体将不会被返回。
- GET:向特定的资源发出请求。
- POST:向指定资源提交数据进行处理请求。数据被包含在请求体中。POST 请求可能会导致 新的资源的建立或已有资源的修改。
- PUT:向指定资源位置 上传最新内容。
- DELETE:请求服务器删除 Request-URL 所标识的资源。
- TRACE:回显服务器收到的请求,主要用于测试和诊断。
- CONNECT:HTTP1.1 协议中预留给能够将连接改为管理方式的代理服务器。
- PATCH:新引入的,对 PUT 方法的补充,用来 对已知资源进行局部修改。
【注】:方法名称是 区分大小写 的。某个请求所针对的资源不支持对应的请求方法的时候,服务器 返回状态码 405。当服务器不认识或不支持对应的请求方法时,返回状态码 501。
- 常见 HTTP 请求头 ?
- Accept:浏览器接受的格式。
- Accept-Encoding:浏览器接受的编码方式。
- Accept-Language:浏览器接受的语言,用于服务器判断多语言。
- Cache-Control:控制缓存的时效性。
- Connection:连接方式,keep-alive 且服务端支持,则会复用 TCP 连接。
- Host:HTTP访问使用的域名。
- if-Modeified-Since:上次访问时的更改时间,如果服务端认为此时间后没有更新,则会给出 304 响应(协商缓存)。
- if-None-Match:上次访问使用的 E-Tag,通常是页面的信息摘要,比更改时间更准确一点(协商缓存)。
- User-Agent:客户端标识,多数浏览器这个字段很复杂,包括操作系统,浏览器内核,版本号,HTML 排版引擎等。
- Cookie:客户端存储的 cookie 字符串。