面试官:http1.1有啥新的特性?带宽优化?怎么做?

333 阅读4分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

作为一个前端人员,熟悉http网络的知识可以说是一项必不可少的技能了,http1.1到http2.0里面有很多的新特性,但是平时在使用的过程中并没有很好的进行总结,甚至有些点自己还没有实践过,在春招面试的过程中还真就给问到了,自己当然是把自己熟悉的地方重拳出击了,但是没有实践过的点在回答的过程中还是唯唯诺诺的,那么今天就来复盘一下自己知道的一些http,顺便动手实践一下。

在开始前,我们先梳理一下我们的理论知识,然后再一个个进行实践操作:

http1.1

  • 长连接
  • 缓存处理
  • 带宽优化以及网络连接的使用
  • host头处理-域名分片
  • 错误通知的管理

http1.1

简单的开启一个服务器

image.png

1.长链接

HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以
传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-
alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

image.png

2.缓存处理

在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多
的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存
头来控制缓存策略。

强缓存

简单的修改下我们的服务器

image.png

我们知道,强缓存主要是通过http请求头中的Cache-Control和Expire两个字段控制。Expire是HTTP1.0标准下的字段,在这里我们可以忽略。我们重点来讨论的Cache-Control这个字段。

一般,我们会设置Cache-Control的值为“public, max-age=xxx”,表示在xxx秒内再次访问该资源,均使用本地的缓存,不再向服务器发起请求。这里的public是指中间服务器还可以缓存(设置为private则不行)。

image.png

很显然实践成功,接着我们再来看看协商缓存。

协商缓存

协商缓存,有ETag和Last-Modified两个字段。那当这两个字段同时存在的时候,以ETag优先
(这个可以自己修改)

image.png

image.png 我们开放一个公共资源区,然后设置强缓存失效,那么访问我public资源的时候就会直接走协商缓存了,当我文件没有变化的ETag不会改变(ETag是通过文件的hash计算得到),那么就会使用协商缓存,否则则会请求新的东西。

第一次请求

image.png

第二次请求--啥也不改变

image.png

第三次请求---改变index.html的内容

image.png 可以注意到只有我们改变了文件,我们的last-modify(根据我最后改变的时间来)和ETage才会改变,才会走200请求新的资源。这里的Etag就对应请求头中的If-none-mathch。

image.png

3.带宽优化以及网络连接的使用

HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来
了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码
是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

具体实践点击这里http1.1带宽优化以及网络连接的使用

4.host头处理-域名分片

在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名
(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机
(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息
都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

这里不知道具体的实践是什么样子的,希望大佬可以补充下。

4.错误通知的管理

 在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;
 410(Gone)表示服务器上的某个资源被永久性的删除。