前端笔记(http)

190 阅读5分钟

题目

http常见的状态码有哪些?

见知识点状态码

http常见的header有哪些?

见知识点常见header

什么是Restful API

见restful API的知识点 和method

描述一下http的缓存机制(重要)

见知识点缓存,重点:综述的图要可以画出来

知识点

状态码分类

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

常见状态码

  • 200成功
  • 301永久重定向(配合新地址,浏览器自动处理)
  • 302临时重定向(配合location,浏览器自动处理)
  • 304资源未被修改
  • 404资源未找到
  • 403没有权限
  • 500服务器错误
  • 504网关超时

关于协议和规范

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

http methods

传统的methods

  • GET获取服务器数据
  • POST向服务器提交数据
  • 简单的网页功能,就这两个操作
  • HEAD获取资源的响应消息报头(不常用)

现在的methods

  • GET获取数据
  • POST新建数据
  • PATCH/PUT更新数据
  • DELETE删除数据
  • TRACE请求回送收到的请求信息,主要用于测试或诊断(不常用)
  • CONNECT 请求建立连接隧道,一般在代理中使用(不常用)
  • OPTION 请求查询服务器的性能,或查询有关资源的可用选项(不常用)

Restful API

  • 一种新的API设计方法
  • 传统api设计:把每个url当做一个功能
  • RestfulAPI设计:把每一个url当做一个资源

如何设计成一个资源?

- 尽量不用url参数
  • 传统API设计:/api/list?pageIndex=2
  • Restful API设计:/api/list/2
用method表示操作类型
- 传统:
  • POST请求 /api/create-blog
  • POST请求 /api/update-blog?id=100
  • GET请求 /api/get-blog?id=100 请求使用get,增删改使用post,url的设计更像功能
restfulAPI设计
  • POST请求 /api/blog
  • POST请求 /api/blog/100
  • GET请求 /api/blog/100 即从url上不知道请求的是什么功能只作为资源的唯一标识。method方法代表了使用的功能

http headers

常见的Requset Headers

  • Accept 浏览器可接受的数据格式
  • Accept-Encoding 浏览器可接收的压缩算法,如 gzip
  • Accept-Languange 浏览器可接收的语言,如 zh-CN
  • Connection:kepp-alive 一次TCP连接重复使用
  • cookie
  • Host 域名
  • User-Agent (简称UA)浏览器信息
  • Content-type发送数据的格式,get请求没有,如application/json

常见的Response Headers

  • Content-type返回数据的格式,如 application/json
  • Content-length返回数据的大小,多少字节
  • Content-Encoding返回数据的压缩算法,如 gzip
  • Set-Cookie服务端向客户端设置 cookie

自定义 header

例子通过axios设置自定义请求头,一般可以用于简单的权限验证

www.axios-js.com/docs/#Reque…

msedge_WIGGG0pOOQ.png

缓存相关的headers

  • Cache-Control&Expires
  • Last-Modified&If-Modified-Since
  • Etag&If-None-Match

http缓存

关于缓存

什么是缓存?

  • 把没有必要重新获取的资源,存起来不再重新获取。

为什么需要缓存?

  • 通过缓存减少网络请求数量和体积,让页面加载的更快。

哪些资源可以被缓存?

  • 静态资源(js css img等)
  • 可以通过哈希来判断文件是否被改变

http强制缓存

第一次请求 msedge_6JF405Ty0q.png 再次请求 msedge_dSGjFqemGe.png 缓存失效 再次请求服务端,重新设置资源

msedge_V4Gfx5kS0n.png

Cache-Control 新标准

  • 在Response Headers
  • 控制强制缓存的逻辑
  • 例如Cache-Control:max-age = 31536000(单位是秒)
cache-control的值
  • max-age 最大过期时间(单位秒);常见
  • no-cache 不使用强制缓存,向服务端请求,交给服务端处理;常见
  • no-store 不用强制缓存,不让服务端做缓存。
  • private 只允许最终用户做缓存
  • public 运行中间的路由和代理进行缓存

Expires 老标准

  • 同在Response Headers中
  • 同为控制缓存过期
  • 已被Cache-Control代替

http协商缓存(对比缓存)

  • 服务器端缓存策略:服务端判断一个资源是不是可以被缓存或者用缓存
  • 服务器判断客户资源,是否和服务端一样
  • 一致则返回304,否则返回200和最新资源 msedge_PLCzKMSyN5.png

资源标识

  • Response Headers中,有两种
  • Last-Modified 资源的最后修改时间
  • Etag资源的唯一标识(一个字符串,类似人类的指纹)
  • requset Header中,有两种与前两者对应
  • If-Modified-Since客户端向服务端发送由上次Last-Modifed发送来的时间数据
  • If-None-Match客户端向服务端发送上次Etag发送来的资源唯一标识
流程示意:

Last-Modified: msedge_TrIpfjsyri.png Etag: msedge_5HUCVku1yS.png

图例:

msedge_0vyuLadSHP.png 请求图例: msedge_n8RiUjzmKx.png

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

综述

msedge_GQWVhvPgFj.png

PS:有无缓存通过Cache-Control判断;是否过期通过max-age判断

三种刷新操作

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

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

  • 正常操作:强制缓存有效,协商缓存有效
  • 手动刷新:强制缓存失效,协商缓存有效
  • 强制刷新: 强制刷新失效,协商缓存失效

https

http和https

  • http是明文传输,敏感信息容易被中间劫持
  • http = http+ 加密,劫持了也无法解密
  • 现代浏览器已经开始强制在线上访问使用https协议

加密方式:对称加密,非对称加密

  • 对称加密:一个key同负责加密,解密
  • 非对称加密:一对key,A加密后,只能用B来解密。

https证书

  • 中间人攻击
  • 使用第三方证书(慎用免费,不合规证书)
  • 浏览器效验证书

Z2pe86CzuO.png