一、学习总结
明天的机会是复习php,Http协议还有两天的量,留到清明放假的3天去完成。
- 第十五章:海纳百川:HTTP的实体数据
- 数据类型与编码,常用的数据类型:text/html、image/gif、image/jpeg、 image/png、audio/mpeg、 video/mp4、application/json,application/javascript、 application/pdf、application/octet-stream。之前同事还问我如果限制pdf类型的文件上传,看来还是有这个类型的,当时没想到。压缩类型:gzip、deflate、br
- 数据类型使用的头字段, Accept来表示数据类型 Accept-Encoding 表示压缩格式
- 语言类型与编码,Accept-Charset Accept-Language :zh-CN,zh,en。返回头Content-Type Content_Language:zh-CN
- 内容协商的质量值,Accept: text/html,application/xml;q=0.9,*/*;q=0.8
- 内容协商的结果,Vary: Accept-Encoding,User-Agent,Accept
- 第十六章:把大象装进冰箱:HTTP传输大文件的 方法
- 数据压缩,压缩数据可以减少带宽压力
- 分块传输,Transfer-Encoding: chunked
- 范围请求,AcceptRanges: bytes bytes=x-y。如果正常返回 状态码是206 Partial Content”.如果超出范围状态码是416 。返回头字段 Content-Range:bytes x-y/length。示例如下
- 多段数据,支持多分段数据multipart/byteranges “boundary=xxx表示分隔
-
GET /16-2 HTTP/1.1 Host: www.chrono.com Range: bytes=0-31
HTTP/1.1 206 Partial Content Content-Length: 32 Accept-Ranges: bytes Content-Range: bytes 0-31/96 // this is a plain text json doc
- 第十七章:排队也要讲效率:HTTP的连接管理
- 短连接,收到响应报文后会立即关闭连接。TCP 建立连接要有“三 次握手”,发送 3 个数据包,需要 1 个 RTT;关闭连接 是“四次挥手”,4 个数据包需要 2 个 RTT。
- 长连接,节省了多次 TCP建立连接和关闭的时间。HTTP/1.1 中的连接都会默认启用长连接。
- 连接相关的头字段,Connection:keep-alive
- 队头阻塞,问题会导致性能下降。
- 性能优化,增加并发或者域名分片
- 第十八章:四通八达:HTTP的重定向和跳转
- 重定向的过程。“Location”字段属于响应字段,必须出现在响应报文 里。但只有配合 301/302 状态码才有意义,它标记了服务 器要求重定向的 URI
- 重定向状态码。301俗称“永久重定向” 302是“临时重定向”。
- 重定向的应用场景。一个最常见的原因就是“资源不可用”,需要用另一个新的 URI 来代替。另一个原因就是“避免重复”,让多个网址都跳转到一个 URI,增加访问入口的同时还不会增加额外的工作量。
- 重定向的相关问题。第一个问题是“性能损耗”。第二个问题是“循环跳转”。
- 第十九章:让我知道你是谁:HTTP的Cookie机制
- Cookie 是服务器委托浏览器存储的一些数据,让服务器有了“记忆能力”
- 响应报文使用 Set-Cookie 字段发送“key=value”形式的 Cookie 值
- 请求报文里用 Cookie 字段发送多个 Cookie 值
- 为了保护 Cookie,还要给它设置有效期、作用域等属性,常用的有 Max-Age、 Expires、Domain、HttpOnly 等
- Cookie 最基本的用途是身份识别,实现有状态的会话事务。
- 第二十章:生鲜速递:HTTP的缓存控制
- 缓存是优化系统性能的重要手段,HTTP 传输的每一个环节中都可以有缓存
- 服务器使用“Cache-Control”设置缓存策略,常用的是“max-age”,表示资源的有 效期
- 浏览器收到数据就会存入缓存,如果没过期就可以直接使用,过期就要去服务器验证是 否仍然可用
- 验证资源是否失效需要使用“条件请求”,常用的是“if-Modified-Since”和“IfNone-Match”,收到 304 就可以复用缓存里的资源
- 验证资源是否被修改的条件有两个:“Last-modified”和“ETag”,需要服务器预先 在响应报文里设置,搭配条件请求使用
- 浏览器也可以发送“Cache-Control”字段,使用“max-age=0”或“no_cache”刷 新数据。
- 第二十一章:良心中间商:HTTP的代理服务
- HTTP 代理就是客户端和服务器通信链路中的一个中间环节,为两端提供“代理服 务”
- 代理处于中间层,为 HTTP 处理增加了更多的灵活性,可以实现负载均衡、安全防护、 数据过滤等功能
- 代理服务器需要使用字段“Via”标记自己的身份,多个代理会形成一个列表
- 如果想要知道客户端的真实 IP 地址,可以使用字段“X-Forwarded-For”和“X-RealIP”
- 专门的“代理协议”可以在不改动原始报文的情况下传递客户端的真
- 第二十二章:冷链周转:HTTP的缓存代理
- 计算机领域里最常用的性能优化手段是“时空转换”,也就是“时间换空间”或者“空 间换时间”,HTTP 缓存属于后者
- 缓存代理是增加了缓存功能的代理服务,缓存源服务器的数据,分发给下游的客户端
- “Cache-Control”字段也可以控制缓存代理,常用的有“private”“smaxage”“no-transform”等,同样必须配合“Last-modified”“ETag”等字段才 能使用
- 缓存代理有时候也会带来负面影响,缓存不良数据,需要及时刷新或删除。