HTTP协议|青训营笔记

80 阅读5分钟

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

本堂课重点内容

本节课介绍了HTTP协议内容和HTTP协议的应用场景。

详细知识点介绍

HTTP基础

从输入网址到展示网页的全过程:

  • browser进程处理输入信息
  • 浏览器内核发起请求
  • 通过Internet到服务器返回响应
  • 浏览器内核读取响应
  • 浏览器内核进行渲染

协议发展过程

  • HTTP/0.9 单行协议

    • 只有GET请求
    • 响应只有HTML文档
  • HTTP/1.0 构建可拓展性

    • 增加了Header
    • 有了状态码
    • 支持多种文档类型
  • HTTP/1.1 标准化协议

    • 链接复用
    • 缓存
    • 内容协商
  • HTTP/2 更优异的表现

    • 二进制协议
    • 压缩header
    • 服务器推送

方法总览

方法的特性:

  • 安全性:不会修改服务器数据(GET HEAD OPTIONS)
  • 幂等性:同样请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的(GET HEAD OPTIONS PUT DELETE)

状态码

  • 200:客户端请求成功
  • 301:资源被永久转移到了其他URL
  • 302:临时跳转
  • 401:未授权
  • 404:请求资源不存在
  • 500:服务器内部错误
  • 504:网关或代理服务器无法在规定时间内得到响应

RESTful API

一种API设计风格。REST指的是表现状态转化

  1. 每个URI代表一种资源
  2. 客户端和服务器间传递这种资源的某种表现层
  3. 客户端通过HTTP method对服务器端资源进行操作,实现“表现层状态转化”

其实就是1码1事,和很多公司把成功的状态码都使用200来表示有所不同。

常用请求头

  • Accept:接收类型,表示浏览器支持的MIME类型。(关于MIME可以参考计网)
  • Content-Type:客户端发送出去实体内容的类型
  • Cache-Control:指定请求和响应遵循的缓存机制,如no-cache
  • If-Modified-Since:对应服务器端的Last-Modified,用来匹配查看文件变动情况
  • Expires:缓存控制,在这个时间内不会请求而是直接使用缓存
  • Max-age:资源在本地缓存使用的时间,时间内不会请求,而是使用缓存
  • If-None-Match:对应服务器端的ETag,用来匹配文件内容是否改变(非常精确)
  • Cookie:由cookie并且同域访问时自动带上
  • Referer:页面的来源URL(精确到详细页面地址)
  • Origin:请求从哪里发起(只精确到端口),比Referer更尊重隐私
  • User-Agent:用户客户端的一些必要信息

常用响应头

  • Content-Type:服务端返回的实体内容的类型
  • Cache-Control:指定请求和响应遵循的缓存机制,如no-cache
  • Last-Modified:资源最后修改时间
  • Expires:应该在何时认为文档以及过期从而不再缓存
  • Max-age:客户端本地资源应该缓存多少秒,开启Cache-Control后有效
  • ETAg:资源的特定版本标识符
  • Set-Cookie:设置和页面关联的cookie,服务器通过这个头部将cookie传给客户端
  • Server:服务器相关信息
  • Access-Control-Allow-Origin:服务器端允许的请求Origin头部

缓存

参考了juejin.cn/post/684490…

  • 强缓存:不会向服务器发送请求,直接从缓存中读取资源,返回200状态码

    • Expires:过期时间,如果设置了时间,则浏览器会在设置的时间内直接读取缓存,不再请求
    • Cache-Control:当值设为max-age=300时,则代表在这个请求正确返回时间(浏览器也会记录下来)的5分钟内再次加载资源,就会命中强缓存
    • public:指示响应可被任何缓存区缓存

cache-control是http/1.1的头字段,expires是http/1.0的头字段,如果expires和cache-control同时存在,cache-control会覆盖expires,建议两个都写。

  • 协商缓存:向服务器发送请求,服务器会根据这个请求的request header的一些参数(If-None-Match,If-Modified-Since)来判断是否命中协商缓存,如果命中,则返回304状态码并带上新的response header通知浏览器从缓存中读取资源

    • Etag/If-None-Match

      • Etag是属于HTTP 1.1属性,它是由服务器(Apache或者其他工具)生成返回给前端,用来帮助服务器控制Web端的缓存验证。Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。
      • 当资源过期时,浏览器发现响应头里有Etag,则再次向服务器请求时带上请求头if-none-match(值是Etag的值)。服务器收到请求进行比对,决定返回200或304
    • Last-Modifed/If-Modified-Since

      • Last-Modified是浏览器向服务器发送资源最后的修改时间
      • 当资源过期时(浏览器判断Cache-Control标识的max-age过期),发现响应头具有Last-Modified声明,则再次向服务器请求时带上头If-Modified-Since,表示请求时间。服务器收到请求后发现有If-Modified-Since则与被请求资源的最后修改时间进行对比(Last-Modified),若最后修改时间较新(大),说明资源又被改过,则返回最新资源,HTTP 200 OK;若最后修改时间较旧(小),说明资源无新修改,响应HTTP 304 走缓存。

cookie

Response中的Set-Cookie

HTTPS

在HTTP基础上进行了TSL/SSL加密

  • 对称加密:加密解密使用同一密钥
  • 非对称加密:加密和解密需要使用公钥私钥两个不同密钥

HTTPS在证书验证阶段使用非对称加密。数据传输阶段使用对称加密。