极客时间 透析http 笔记 进阶篇 03

15 | 海纳百川:HTTP的实体数据

小结今天我们学习了 HTTP 里的数据类型和语言类型,在这里为今天的内容做个小结。

①数据类型表示实体数据的内容是什么,使用的是 MIME type,相关的头字段是 Accept 和 Content-Type;

②数据编码表示实体数据的压缩方式,相关的头字段是 Accept-Encoding 和 Content-Encoding;

③语言类型表示实体数据的自然语言,相关的头字段是 Accept-Language 和 Content-Language;

④字符集表示实体数据的编码方式,相关的头字段是 Accept-Charset 和 Content-Type;

⑤客户端需要在请求头里使用 Accept 等头字段与服务器进行“内容协商”,要求服务器返回最合适的数据;

⑥Accept 等头字段可以用“,”顺序列出多个可能的选项,还可以用“;q=”参数来精确指定权重。

课下作业

试着解释一下这个请求头“Accept-Encoding: gzip, deflate;q=1.0, *;q=0.5, br;q=0”,再模拟一下服务器的响应头。

客户端接受gzip,deflate的压缩格式权重都是1,请优先给我这两种合适的压缩形式,对于其他形式的压缩接受权重为0.5,拒绝br形式的压缩
服务器的响应:Content-Encoding:gzip

假设你要使用 POST 方法向服务器提交一些 JSON 格式的数据,里面包含有中文,请求头应该是什么样子的呢?

content-type: zh-CN, zh, charset=utf-8, application/json

试着用快递发货收货比喻一下 MIME、Encoding 等概念。

比如说我想在某宝上买乐高,
MIME 确定了我购买的乐高种类,是成品呢, 还是零散的需要自己拼装。
Encoding好比这个乐高的包装方式,某宝可以选择把所有的乐高零件全都放在一个包装里, 也可以分模块把零件放在不同的包装里。 我也可以主动告诉某宝我想要哪一种包装方式。

16 | 把大象装进冰箱:HTTP传输大文件的方法

小结

今天我们学习了 HTTP 传输大文件相关的知识,在这里做一下简单小结:

①压缩 HTML 等文本文件是传输大文件最基本的方法;

②分块传输可以流式收发数据,节约内存和带宽,使用响应头字段“Transfer-Encoding: chunked”来表示,分块的格式是 16 进制长度头 + 数据块;

③范围请求可以只获取部分数据,即“分块请求”,实现视频拖拽或者断点续传,使用请求头字段“Range”和响应头字段“Content-Range”,响应状态码必须是 206;

④也可以一次请求多个范围,这时候响应报文的数据类型是“multipart/byteranges”,body 里的多个部分会用 boundary 字符串分隔。

17 | 排队也要讲效率:HTTP的连接管理

小结

这一讲中我们学习了 HTTP 协议里的短连接和长连接,简单小结一下今天的内容:

①早期的 HTTP 协议使用短连接,收到响应后就立即关闭连接,效率很低;

②HTTP/1.1 默认启用长连接,在一个连接上收发多个请求响应,提高了传输效率;

③服务器会发送“Connection: keep-alive”字段表示启用了长连接;

④报文头里如果有“Connection: close”就意味着长连接即将关闭;过多的长连接会占用服务器资源,所以服务器会用一些策略有选择地关闭长连接;

⑤“队头阻塞”问题会导致性能下降,可以用“并发连接”和“域名分片”技术缓解。

18 | 四通八达:HTTP的重定向和跳转

小结

今天我们学习了 HTTP 里的重定向和跳转,简单小结一下这次的内容:

①重定向是服务器发起的跳转,要求客户端改用新的 URI 重新发送请求,通常会自动进行,用户是无感知的;

②301/302 是最常用的重定向状态码,分别是“永久重定向”和“临时重定向”;

③响应头字段 Location 指示了要跳转的 URI,可以用绝对或相对的形式;

④重定向可以把一个 URI 指向另一个 URI,也可以把多个 URI 指向同一个 URI,用途很多;

⑤使用重定向时需要当心性能损耗,还要避免出现循环跳转。

19 | 让我知道你是谁:HTTP的Cookie机制

小结

       今天我们学习了 HTTP 里的 Cookie 知识。虽然现在已经出现了多种 Local Web Storage 技术,能够比 Cookie 存储更多的数据,但 Cookie 仍然是最通用、兼容性最强的客户端数据存储手段。

简单小结一下今天的内容:

①Cookie 是服务器委托浏览器存储的一些数据,让服务器有了“记忆能力”;

②响应报文使用 Set-Cookie 字段发送“key=value”形式的 Cookie 值;

③请求报文里用 Cookie 字段发送多个 Cookie 值;

④为了保护 Cookie,还要给它设置有效期、作用域等属性,常用的有 Max-Age、Expires、Domain、HttpOnly 等;

⑤Cookie 最基本的用途是身份识别,实现有状态的会话事务。

     还要提醒你一点,因为 Cookie 并不属于 HTTP 标准(RFC6265,而不是 RFC2616/7230),所以语法上与其他字段不太一致,使用的分隔符是“;”,与 Accept 等字段的“,”不同,小心不要弄错了。

  课下作业

如果 Cookie 的 Max-Age 属性设置为 0,会有什么效果呢?

设置为0,服务器0秒就让Cookie失效,即立即失效,服务器不存Cookie。

Cookie 的好处已经很清楚了,你觉得它有什么缺点呢?

好处:方便了市民
缺点:方便了黑客:)

20 | 生鲜速递:HTTP的缓存控制

总结

今天我们学习了 HTTP 的缓存控制和条件请求,用好它们可以减少响应时间、节约网络流量,一起小结一下今天的内容吧:

①缓存是优化系统性能的重要手段,HTTP 传输的每一个环节中都可以有缓存;

②服务器使用“Cache-Control”设置缓存策略,常用的是“max-age”,表示资源的有效期;

③浏览器收到数据就会存入缓存,如果没过期就可以直接使用,过期就要去服务器验证是否仍然可用;

④验证资源是否失效需要使用“条件请求”,常用的是“if-Modified-Since”和“If-None-Match”,收到 304 就可以复用缓存里的资源;

⑤验证资源是否被修改的条件有两个:“Last-modified”和“ETag”,需要服务器预先在响应报文里设置,搭配条件请求使用;

⑥浏览器也可以发送“Cache-Control”字段,使用“max-age=0”或“no_cache”刷新数据。

⑦HTTP 缓存看上去很复杂,但基本原理说白了就是一句话:“没有消息就是好消息”,“没有请求的请求,才是最快的请求。”

课下作业

①Cache 和 Cookie 都是服务器发给客户端并存储的数据,你能比较一下两者的异同吗?

Cache 和 Cookie 的相同点是:都会保存到浏览器中,并可以设置过期时间。
不同点:
1. Cookie 会随请求报文发送到服务器,而 Cache 不会,但可能会携带 if-Modified-Since(保存资源的最后修改时间)和 If-None-Match(保存资源唯一标识) 字段来验证资源是否过期。
2. Cookie 在浏览器可以通过脚本获取(如果 cookie 没有设置 HttpOnly),Cache 则无法在浏览器中获取(出于安全原因)。
3. Cookie 通过响应报文的 Set-Cookie 字段获得,Cache 则是位于 body 中。
4. 用途不同。Cookie 常用于身份识别,Cache 则是由浏览器管理,用于节省带宽和加快响应速度。
5. Cookie 的 max-age 是从浏览器拿到响应报文时开始计算的,而 Cache 的 max-age 是从响应报文的生成时间(Date 头字段)开始计算。

作者回复: 总结的非常好。

第三点感觉有点问题,cache缓存的是完整的报文,不单单是body。

②即使有“Last-modified”和“ETag”,强制刷新(Ctrl+F5)也能够从服务器获取最新数据(返回 200 而不是 304),请你在实验环境里试一下,观察请求头和响应头,解释原因。

强制刷新,请求头里有Pragma: no-cache和Cache-Control: no-cache,没有If-Modified-Since/If-None-Match,这个Pragma: no-cache的意思是禁用缓存

21 | 良心中间商:HTTP的代理服务

小结

①HTTP 代理就是客户端和服务器通信链路中的一个中间环节,为两端提供“代理服务”;

②代理处于中间层,为 HTTP 处理增加了更多的灵活性,可以实现负载均衡、安全防护、数据过滤等功能;

③代理服务器需要使用字段“Via”标记自己的身份,多个代理会形成一个列表;

④如果想要知道客户端的真实 IP 地址,可以使用字段“X-Forwarded-For”和“X-Real-IP”;

⑤专门的“代理协议”可以在不改动原始报文的情况下传递客户端的真实 IP。

课下作业

你觉得代理有什么缺点?实际应用时如何避免?

代理代理就是找她人代替你去打理一些事情,让他人代办事情你必须交代好沟通好,那效率自然会低一些,另外,如果代理出问题了,那你的事自然也办不成了,所以,可能存在单点问题,不过一般还好

代理会增加链路长度,在代理上做一些复杂的处理。会很耗费性能,增加响应时间。

你知道多少反向代理中使用的负载均衡算法?它们有什么优缺点?

随机——简单,是否均匀看随机情况
轮询(一般轮询、加权轮询)——相对简单,也会考虑机器资源和性能的均衡性
哈希(一般哈希、一致性哈希、带虚拟节点的一致性哈希)——相对复杂,要求越公平就会越复杂,而且适当考虑了请求
哈希槽,和redis类似

 

22 | 冷链周转:HTTP的缓存代理

小结

源服务器的缓存控制

客户端的缓存控制

①计算机领域里最常用的性能优化手段是“时空转换”,也就是“时间换空间”或者“空间换时间”,HTTP 缓存属于后者;

②缓存代理是增加了缓存功能的代理服务,缓存源服务器的数据,分发给下游的客户端;

③“Cache-Control”字段也可以控制缓存代理,常用的有“private”“s-maxage”“no-transform”等,同样必须配合“Last-modified”“ETag”等字段才能使用;

④缓存代理有时候也会带来负面影响,缓存不良数据,需要及时刷新或删除。

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值