HTTP/HTTPS|青训营笔记

76 阅读4分钟

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

http缓存

缓存对象常为静态资源(图片、js、css)

用webpack打包的时候在后面加一串哈希值(根据内容算出来的)

  • 文件内容不变,哈希值也不变,因此可以使用缓存机制

本地强制缓存流程

  • 客户端初次请求服务端资源,若请求的是可缓存资源,服务端会在返回资源的同时在header中加一个cache-control,包含最大缓存时间等信息,然后缓存到本地

    • max-age:最大缓存时间
    • no-cache:只使用协商缓存(也就是不判断资源是否过期,直接向服务器请求)
    • no-store:不使用缓存
  • 客户端再次请求这个资源时,会先去本地缓存中找这个资源

  • 若超过最大缓存时间,才会去服务端请求这个资源,或进入协商缓存流程

协商/对比缓存

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

流程:

  • 初次请求,服务端返回资源和资源标识,并将资源缓存到本地,再次请求时带着资源标识请求

    • Last-Modified:资源最后修改时间
    • Etag:资源唯一标识,优先级更高
  • 资源一致返回304,浏览器使用本地缓存,不一致则返回新资源和新标识

刷新页面对缓存的影响

正常跳转: 都有效

手动刷新F5: 强制缓存失效

  • 解决当服务器在缓存时间没到期时就修改了数据,浏览器不能及时更新的问题

强制刷新Ctrl+F5: 都失效

HTTPS

  • http是明文传输,敏感信息容易被劫持,https则会给信息加密,就算被劫持也无法解密
  • https默认使用443端口,http则为80
  • https同时使用对称加密和非对称加密,先使用非对称加密方式获得一个字符串,再将这个字符串作为key使用对称加密,这样成本更低

对称加密: 使用同一个key进行加密和解密

非对称加密:使用一对key,用A key加密后只能用B key解密

  • 传递的只有公钥(用于加密),私钥(用于解密)始终在服务端不会传递

http证书

中间人攻击: 黑客截取到公钥并替换为自己的公钥,让客户端误以为拿到的是服务端的公钥

  • https 引入了 CA 证书机制,也就是找一个权威的第三方机构为自己背书,CA 证书上的数字签名可以用来保证双方的通信内容未遭到篡改。

HTTPS连接过程

相当于HTTP+TLS

  1. TCP三次握手:SYN->SYN+ACK->ACK

  2. TLS四次握手:验证证书、使用非对称方式生成之后对称加密的密钥

    1. 这个过程涉及两对密钥(非对称+对称)
  3. 加密通信:对称加密

状态码

  • 1xx-服务器收到请求
  • 2xx-请求成功
  • 3xx-需要重定向,浏览器直接跳转;301永久,302临时,304资源未修改
  • 4xx-客户端请求错误(如url错误),404资源未找到,403无访问权限
  • 5xx-服务器端错误

RESTful

  • 一种api设计方法或者规范
  • 传统的API把url当成一个功能,restful把url当成唯一资源,如何操作这个资源则通过 method 表示
  • 在使用上,面向资源(如增删改查)时遵守,面向过程(如登录)则可以放弃

特点

  • 无状态:一次调用就会返回结果,不存在 打开连接->访问数据库->关闭连接 这种模式
  • 面向资源:不管是数据还是服务/行为,一切都是资源
  • 使用HTTP动词:在面向资源的基础上,加入如 GET POST PUT等

  • HATOAS Hypertext As The Engine Of Application State 超媒体作为应用状态引擎

    • 即返回结果中提供链接,连向其他 API 方法,使得用户不查文档,也知道下一步应该做什么