小Q:什么是 HTTP 协议?
慢慢:HTTP 是一个属于应用层的面向对象的协议,由于其简便,快捷的方式,适用于分布式超媒体信息系统。其特点如下:
- 支持客户/服务器模式
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,通信速度快。
- 灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记。
- 无状态:HTTP 协议是无状态协议。指对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就比较快。
小Q:HTTP 有哪些常用的状态码?
慢慢:状态码分类:
- 1xx:表示目前是协议的中间状态,还需要后续请求
- 2xx:表示请求成功
- 3xx:表示重定向状态,需要重新请求
- 4xx:表示请求报文错误
- 5xx:表示服务器端错误
常用状态码:
- 200:请求成功
- 301:永久重定向,会缓存
- 302:临时重定向,不会缓存
- 403:服务器禁止访问
- 404:资源未找到
- 500:服务器错误
- 503:服务器繁忙
小Q:301 和 302 的区别是什么?
慢慢:301 和 302 都表示重定向,就是说浏览器拿到服务器返回的状态码后会自动跳转到新的 URL 地址。这个地址可以从响应的 Location 首部获取到。
- 301 表示旧地址 A 的资源已经被永久地移除,搜索引擎在抓取内容的是由将旧的网址交换为重定向后的网址;
- 302 表示旧地址 A 的资源还在(仍然可以访问),这个重定向只是临时地从旧地址 A 跳转到地址 B,搜索引擎会抓取新地内容而保存旧的地址。
小Q:HTTP 版本有哪些?
- http1.0:默认是短连接,长连接需要设置 keep-alive,不带有 host 域。
- http1.1:默认是长连接,增加 HOST 域,有管道机制,分块传输编码。
- http2.0:多路复用,二进制流
小Q:什么是管道流机制呢?
慢慢:在 http1.x 阶段,都是基于串行字符流的方式传输数据。由于浏览器的限制,当访问同域下的资源时,浏览器最多开启 6 个线程去请求和处理资源,并且每次请求都是串行的,即一个线程请求一次资源需要等待响应后才能再次请求。
管道机制为了解决上述问题,将多个请求打包成一个请求发送,这样就极大地减少了资源的请求时间。
小Q:什么是多路复用呢?
慢慢:在 http2.0 阶段引入了多路复用机制,其目的也是解决跟管道流一样的问题。有上述知道,每次发送请求时都得要同步阻塞,等待响应结果。
而多路复用就将每个请求的连接用符号表的形式记录下来,然后不用等待收到响应,直接发送下个请求。并且通过一个线程去轮询符号表,从而知道哪个请求得到了响应,再去处理响应的数据。