HTTP课程学习 | 青训营笔记

75 阅读5分钟

这是我参与「第四届青训营 」笔记创作活动的的第11天

HTTP实用指南

背景知识

Hyper Text Transfer Protocol超文本传输协议。 应用层协议,基于TCP协议

特点:

  • 请求 响应
  • 简单可扩展
  • 无状态

协议分析

HTTP/1.1

start line-->headers-->empty line-->body

  • Request重要:声明地址
  • response重要:响应结果 |Method | | | |---|---|---| |Safe(安全的)|不会修改服务器数据的方法| GET\HEAD\OPTIONS| Idempotent(幂等)| 同样的请求被执行一次与连续执行多次的效果是一样的,服务器状态也是一样的| GET\HEAD\OPTIONS\PUT(替换资源)\DELETE

所有safe的方法都是Idempotent的

状态码

1xx提示信息,表请求已接收,继续处理
2xx成功,表请求已被成功接收、理解、接受
3xx重定向,要完成请求必须继续更进一步操作
4xx客户端错误,请求有语法错误或请求无法实现
5xx服务端错误,服务器未能实现合法的请求
  • 200 OK-客户端请求成功
  • 301 资源(网页等)被永久转移到其他URL
  • 302 临时跳转
  • 401 请求资源不存在,可能输入错误URL
  • 500 服务器内部发生不可预期错误
  • 504 网关或代理服务器超时

缓存

在HTTP中具有缓存功能的是浏览器缓存, HTTP缓存作为web性能优化的重要手段。

缓存规则
   HTTP的缓存属于客户端缓存,而浏览器则存在缓存数据库,用于存储一些不经常变化的静态文件
   本篇介绍:强缓存与协商缓存;强缓存,本地有则直接使用;协商缓存,本地有但需要双方协商确认后再使用

  1. 强缓存

当缓存数据库中已有所请求的数据时。客户端直接从缓存数据库中获取数据,否则从服务端获取数据。

  • Expires,时间戳
    • 为服务端返回的数据到期时间(但由于是 HTTP/1.0 的产物,目前逐渐被 Cache-Control 替代)
  • Cache-Control
    • 可缓存性
      • no-cache:需要使用协商缓存来验证缓存数据
      • no-store:所有内容都不会缓存
      • private:客户端可以缓存
      • private:客户端可以缓存
    • 到期
      • max-age:单位(秒),存储的最大周期,相对于请求的时间
    • 重新验证-重新加载
      • must-revalidate:一旦资源过期,在成功向原始服务器验证之前,不能使用
  1. 协商缓存

又称对比缓存

  • 客户端会先从缓存数据库中获取到一个缓存数据的标识
  • 得到标识后请求服务端验证是否失效
  • 如果没有失效,服务端会返回304,直接从缓存中获取所请求的数据;
  • 如果失效,服务端会返回更新后的数据
  • Etag:资源的特点版本的标识符,类似于指纹
  • If-None-Match:同Etag。服务器接收到次报文后发现If-None-Match则与被请求资源的唯一标识进行对比。
    • 不同则说明资源被修改,响应整个资源内容,返回200
    • 相同则说明资源并未修改,响应header,浏览器直接从缓存中获取数据信息,返回304
  • Last-Modified:返回最后修改时间
  • If-Modified-Since:返回最后修改时间,判断文件是否被修改
    • 若被修改,传输响应整体,则返回200
    • 未被修改,传输响应header,返回304 Not Modified

小总结:
    两类缓存机制可以同时存在,强制缓存的优先级高于协商缓存,当执行强制缓存时,如若缓存命中,则直接使用缓存数据库数据,不在进行缓存协商。

HTTP/2

较HTTP1更快、更稳定、更简单。使用了二进制编码。


HTTP/2通信的最小单位,每个帧都包含帧头,表示出当前帧所属的数据流。

  • 使用二进制编码
  • 并行,交错发送,接收方进行重组织

消息
与逻辑请求或响应消息对应的完整的一系列帧,逻辑概念

数据流
已建立的连接内的双字节流可以承载一条或多条消息

HTTP/2协议特性:

  • HTTP/2连接都是永久的,而且仅需要每个来源一个连接
  • 流控制:阻止发送方向接收方发送大量数据的机制(主动拒绝)
  • 服务器推送(主动推送可能需要的信息)

常见场景

  • 静态资源方案:缓存 + CDN + 文件名 hash
  • CDN:Content Delivery Network
  • 通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户请求提供服务 (保证拿到内容,尽量就近)
  • SSO:Single Sign On单点登录

实际应用

用户体验最优--网络优化

总结

听完本节课...觉得自己还需要再打打基础,网络协议的内容基本都忘光光...不过最近探索到一个新的学习方式,就是在听完课程之后,去阅读相关的好文,可以大大加深理解程度,同时也可以巩固所学知识。