uploadhub的技术博客 uploadhub的技术博客
首页
  • 学习笔记

    • 《HTML5和CSS3篇》
    • 《JavaScript基础篇》
    • 《JavaScript高级篇》
    • 《Ajax篇》
    • 《JavaScript模块化篇》
    • 《Node.js篇》
    • 《MongoDB篇》
    • 《Promise篇》
    • 《Git篇》
  • 《Vue2+Vue3篇》
  • 《React篇》
  • 一面-基础
  • 二三面-进阶
关于我
  • 分类
  • 标签
  • 归档

uploadhub

首页
  • 学习笔记

    • 《HTML5和CSS3篇》
    • 《JavaScript基础篇》
    • 《JavaScript高级篇》
    • 《Ajax篇》
    • 《JavaScript模块化篇》
    • 《Node.js篇》
    • 《MongoDB篇》
    • 《Promise篇》
    • 《Git篇》
  • 《Vue2+Vue3篇》
  • 《React篇》
  • 一面-基础
  • 二三面-进阶
关于我
  • 分类
  • 标签
  • 归档
  • JS基础知识(一)-变量类型和计算
  • JS基础知识(二)- 原型和原型链
  • JS基础知识(三)- 作用域、闭包
  • JS基础知识(四)- 异步和单线程
  • JS基础知识(五)- 异步进阶
  • JS-Web-API(一)- DOM & BOM
  • JS-Web-API(二)- 事件
  • JS-Web-API(三)- Ajax
  • JS-Web-API(四)- 存储
  • HTTP协议及缓存机制
    • 1.几道面试题(以点带面)
    • 2.涉及知识点
      • 2.1 http状态码
      • 状态码分类
      • 常见状态码
      • 关于协议和规范
      • 2.2 http methods
      • 传统的methods
      • 现在的methods
      • Restful API
      • 2.3 如何将url设计成一个资源
      • 不使用 url 参数
      • 用method表示操作类型(传统API设计)
      • 用method表示操作类型(Restful API设计)
      • 2.4 http headers
      • Request Headers
      • Response Headers
      • 自定义header
      • 缓存相关的 headers
      • 2.5 http缓存
      • 关于缓存
      • 强制缓存(cache-control和Expires)
      • Cache-Control
      • 关于 Expires
      • 协商缓存(又称对比缓存)
      • 资源标识
      • Last-Modified
      • Etag
      • Last-Modified 和 Etag对比
      • 缓存综述流程图
      • 2.6 刷新页面对http缓存的影响
      • 三种刷新操作
      • 不同刷新操作,不同的缓存策略
    • 3.对前文问题的解答
      • 3.1 http 常见的状态码有哪些?
      • 3.2 http 常见的 header 有哪些?
      • 3.3 什么是 Restful API
      • 3.4 描述一下http的缓存机制
  • 开发环境
  • 运行环境
  • 一面-基础
uploadhub
2022-05-28
目录

HTTP协议及缓存机制

前端工程师开发界面,需要调用后端的接口,提交/获取数据<——>http协议,这要求我们事先掌握好 Ajax

# 1.几道面试题(以点带面)

  1. http 常见的状态码有哪些?
  2. http 常见的 header 有哪些?
  3. 什么是 Restful API
  4. 描述一下http的缓存机制(重要)

# 2.涉及知识点

# 2.1 http状态码

# 状态码分类

  1. 1xx:服务器收到请求
  2. 2xx:请求成功,如200
  3. 3xx:重定向,如302
  4. 4xx:客户端错误,如404
  5. 5xx:服务端错误,如500

# 常见状态码

常见状态码 含义
200 成功
301 永久重定向(配合location,浏览器自动处理)
302 临时重定向(配合location,浏览器自动处理)
304 资源未被修改
(之前请求过了,服务器这边对该资源暂未做改动,故不发送数据,客户端用本地缓存即可)
404 资源未找到
403 没有权限
500 服务器错误
504 网关超时

# 关于协议和规范

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

# 2.2 http methods

# 传统的methods

  1. get 获取服务器的数据
  2. post 向服务器提交数据
  3. 简单的网页功能,就这两个操作

# 现在的methods

  1. get 获取数据
  2. post 新建数据
  3. patch/put 更新数据
  4. delete 删除数据

# Restful API

  1. 一种新的API设计方法(早已推广使用)
  2. 传统API设计:把每个url当做一个功能
  3. Restful API设计:把每个url当做一个唯一的资源

# 2.3 如何将url设计成一个资源

  1. 尽量不用 url 参数
  2. 用method表示操作类型

# 不使用 url 参数

  1. 传统API设计:/api/list?pageIndex=2
  2. Restful API设计:/api/list/2

# 用method表示操作类型(传统API设计)

  1. post 请求 /api/create-blog
  2. post请求 /api/update-blog?id=100
  3. get 请求 /api/get-blog?id=100

# 用method表示操作类型(Restful API设计)

  1. post请求 /api/blog
  2. patch请求 /api/blog/100
  3. get请求 /api/blog/100

# 2.4 http headers

  1. 常见的 Request Headers(请求时客户端向服务端发送的headers)
  2. 常见的 Response Headers(服务端向客户端返回时发送的headers)

# Request 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

Response Headers 含义或用途
Content-type 返回数据的格式,如 application/json
Content-length 返回数据的大小,多少字节
Content-Encoding 返回数据的压缩算法,如gzip
Set-Cookie 服务器可通过该响应头修改cookie

# 自定义header

  1. 客户端或者服务器端都可添加自定义的header
  2. header名和对应的值都无限制,只要不和已规范的其他固定header名冲突即可
  3. 可以用做简单的权限验证,比如客户端只有发送了某个自定义header和特定的对应值,服务器端验证合法后,才能成功请求到对应API的资源

# 缓存相关的 headers

  1. Cache-Control
  2. Expires
  3. Last-Modified
  4. If-Modified-Since
  5. Etag
  6. If-None-Match

# 2.5 http缓存

# 关于缓存

  1. 什么是缓存?是存贮数据(使用频繁的数据)的临时地方
  2. 为什么需要缓存?减轻服务器压力,减少网络延迟,加快页面打开速度
  3. 哪些资源可以被缓存?一大部分情况只有静态资源(js、css、img)

# 强制缓存(cache-control和Expires)

image-20220913220022328

image-20220913220641802

# Cache-Control
  1. 该响应头在Response Headers 中,故只被服务器端控制
  2. 控制强制缓存的逻辑
  3. 例如 Cache-Control:max-age=31536000(单位是秒),意思是服务器要求把对应资源缓存在客户端中一年时间
cache-control的值 作用
max-age 常用,设置缓存的最大过期时间
no-cache 常用,不用强制缓存,正常向服务端发起请求,像html这种资源可以用该值
no-store 不用强制缓存,也不用服务端的缓存措施(如协商缓存),只要服务端正常返回一份资源
private 只允许最终的用户缓存,即用户手中的电脑、手机等终端
public 允许传输时中间的某些路由或代理进行缓存
# 关于 Expires
  1. 同在 Response Headers 中
  2. 同为控制缓存过期
  3. Expires是老标准,已被 Cache-Control 代替,不过浏览器暂时仍兼容Expires

# 协商缓存(又称对比缓存)

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

image-20220913223553803

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

注意:If-Modified-Since的值是直接拷贝Last-Modified的值,故If-Modified-Since==Last-Modified,只是If-Modified-Since是在Request Headers中,Last-Modified是在Response Headers中

image-20220913224042792

# Etag

注意:If-None-Match的值是直接拷贝Etag的值,故If-None-Match==Etag,只是If-None-Match是在Request Headers中,Etag是在Response Headers中

image-20220913224544561

# Last-Modified 和 Etag对比
  1. 会优先使用 Etag
  2. Last-Modified 只能精确到秒级
  3. 如果资源被重复生成,而内容不变,则Etag更精确

# 缓存综述流程图

http缓存综述流程图

# 2.6 刷新页面对http缓存的影响

# 三种刷新操作

  1. 正常操作:地址栏输入url,跳转链接,前进后退等
  2. 手动刷新:F5键,点击刷新按钮,右击菜单刷新
  3. 强制刷新:Ctrl+F5键

# 不同刷新操作,不同的缓存策略

  1. 正常操作:强制缓存有效,协商缓存有效
  2. 手动刷新:强制缓存失效,协商缓存有效
  3. 强制刷新:强制缓存失效,协商缓存失效

# 3.对前文问题的解答

# 3.1 http 常见的状态码有哪些?

常见状态码 含义
200 成功
301 永久重定向(配合location,浏览器自动处理)
302 临时重定向(配合location,浏览器自动处理)
304 资源未被修改
(之前请求过了,服务器这边对该资源暂未做改动,故不发送数据,客户端用本地缓存即可)
404 资源未找到
403 没有权限
500 服务器错误
504 网关超时

# 3.2 http 常见的 header 有哪些?

参考2.4节,说出来三五个也基本过关了

# 3.3 什么是 Restful API

传统API把每个url当做一个功能,Restful API则把每个url当做一个唯一的资源。设计Restful API时,应不用 url 参数,并使用method表示操作类型。

# 3.4 描述一下http的缓存机制

参考2.5节,把缓存综述流程图完整画出来就没问题了

#面试#HTTP
JS-Web-API(四)- 存储
开发环境

← JS-Web-API(四)- 存储 开发环境→

最近更新
01
开发环境
05-28
02
JS基础知识(一)-变量类型和计算
05-28
03
JS基础知识(三)- 作用域、闭包
05-28
更多文章>
Theme by Vdoing | Copyright © 2021-2023 uploadhub | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式