关于HTTP,你只看这个就够了!

145 阅读3分钟

这是我参与 8 月更文挑战的第 10 天,活动详情查看: 8月更文挑战

http状态码

  • 1xx 服务器收到请求
  • 2xx 请求成功,如200
    • 200 成功
  • 3xx 重定向,如302
    • 301 永久重定向(配合location,浏览器自动处理)
    • 302 临时重定向(配合location,浏览器自动处理)
    • 304 资源未被修改
  • 4xx 客服端错误,如404
    • 403 没有权限
    • 404 资源未找到
  • 5xx 服务端错误,如500
    • 500 服务器错误
    • 504 网关超时

协议和规范

  • 就是一个约定
  • 要求大家都跟着执行
  • 不要违反规范,如IE浏览器

http常见的headers有哪些

  • 常见的Request Headers
    • Accept 浏览器可接收的数据格式
    • Accept-Encoding 浏览器可接收的压缩算法,如gzip
    • Accept-Languange 浏览器可接收的语言,如zh-CN
    • Connection:keep-alive 一次TCP连接重复使用
    • cookie
    • Host 域名
    • User-Agent(简称UA) 浏览器信息
    • Content-type 发送数据的格式,如 application/json
  • 常见的Response Headers
    • Content-type 返回数据的格式,如application/json
    • Content-length 返回数据的大小,多少字节
    • Content-Encoding 返回数据的压缩算法,如gzip
    • Set-Cookie 服务器端在客户端设置cookie
  • 自定义Headers
  • 缓存相关的Headers
    • Cache-Control Expires
    • Last-Modefied If=Modefied-Since
    • Etag If-None-Match

什么是Restful API

  • 传统的 methods
    • get 获取服务器数据
    • post 向服务器提交数据
    • 简单的网页功能,就这2个操作
  • 现在的 methods
    • get 获取数据
    • post 新建数据
    • patch/put 更新数据
    • delete 删除数据
  • Restful API
    • 一种新的API设计方法(早已推广使用)
    • 传统API设计:把每个url当做一个功能
    • Restful API设计: 把每个url当做一个唯一的资源

如何设计成一个资源

  • 不使用url参数
    • 传统API设计: /api/list?pageIndex=2
    • Restful API设计: /api/list/2
  • 用method表示操作类型
    • 传统API设计:
      • post请求: /api/create-blog
      • psot请求: /api/update-blog?id=10
      • get请求: /api/get-blog?id=10
    • Restful API设计
      • post请求 /api/blog
      • patch请求 /api/blog/100
      • get请求 /api/blog/100

http缓存机制

存就是数据交换的缓冲区(称作:Cache),当某一硬件要读取数据时,会首先从缓存汇总查询数据,有则直接执行,不存在时从内存中获取。由于缓存的数据比内存快的多,所以缓存的作用就是帮助硬件更快的运行。

那些资源可以被缓存? 静态资源(js css img)

http缓存策略(强制缓存+协商缓存)

image.png

http缓存-强制缓存

  • Cache-Control
    • 在Response Headers中
    • 控制强制缓存的逻辑
    • 如 Cache-Control:max-age=31536000(单位是秒)
  • Cache-Control的值
    • max-age
    • no-cache 不用强制本地缓存,交给服务端处理
    • no-store 彻底禁用缓存;本地和代理服务器都不缓存,每次都从服务器获取
    • private 只允许最终用户做缓存
    • public 中间路由代理可做缓存
  • Expires
    • 同在Response Headers中

    • 同为控制缓存过期

    • 已被Cache-Control代替

image.png

image.png

http缓存- 协商缓存

  • 服务器端缓存策略
  • 服务器判断客户端资源,是否和服务端资源一致
  • 一致则返回304,否则返回200和最新的资源

资源标识

  • 在Response Headers中,有2种
  • Last-Modified 资源的最后修改时间
  • Etag资源的唯一标识(一个字符串,类似人的指纹)

image.png

image.png

Last-Modified 和 Etag

  • 会优先使用Etag
  • Last-Modified 只能精确到秒级
  • 如果资源被重复生存,而内容不变,则Etag更精确

刷新操作方式,对缓存的影响

  • 正常操作:地址栏输入url,跳转链接,前进后退等
    • 强制缓存有效,协商缓存有效
  • 手动刷新:F5, 点击刷新按钮,右击菜单刷新
    • 强制缓存失效,协商缓存有效
  • 强制刷新:ctrl+F5
    • 强制缓存失效,协商缓存失效