HTTP协议 | 青训营笔记

86 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天,加油!

初识HTTP协议

初识

TCP协议的特点是 面向连接 点对点 (一对一)可靠交付 面向字节流,也就是说仅仅把上层协议传递过来的数据当成字节传输 为了实现TCP上述的E特点,TCP协议需要解决的是面向连接(建立连接和关闭连接的方式)、可靠传输(错误确认和重传)、流量控制( 发送和接收方的传输速率和协调)、拥塞控制四个方面

什么是HTTP

  • Hyper Text Transfer Protocol 超文本传输协议
  • 应用层协议,基于TCP协议
  • 请求 响应
  • 简单可扩展
  • 无状态

协议分析

发展历程

报文分析

  • Method

  • safe(安全的):不会修改服务器的数据的方法--GET HEAD OPTIONS

  • Idempotent(幂等):同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的,服务器的状态也是一样的

  • 所有safe的方法都是Idempotent的

  • GET HEAD OPTIONS PUT DELETE

  • 状态码

  • RESTful API 一种API设计风格

  • (1)每一个URL代表一种资源

  • (2)客户端和服务器之间,传递这种资源的某种表现层

  • (3)客户酸通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化”

  • 常用请求头

  • 常用响应头

缓存

  • 强缓存
  • 协商缓存
  • cookie

HTTP协议的应用场景分析

静态资源

  • 静态资源方案:缓存+CDN+文件名hash
  • CDN:Content Delivery Network
  • 通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户提供服务

登陆

  • 跨域---cross-origin

  • ---same-origin

  • 跨域解决方案

    • CORS
    • 代理服务器 * 同源策略是浏览器的安全策略,不是HTTP的
    • Iframe * 诸多不便
  • 鉴权 * Session+cookie * JWT(JSON web token) * 适合使用jwt的场景: * 有效期短 * 只希望被使用一次 ( 比如,用户注册后发一封邮件让其激活账户,通常邮件中需要有一个链接,这个链接需要具备以下的特性:能够标识用户,该链接具有时效性( 通常只允许几小时之内激活),不能被篡改以激活其他可能的账户,一次性的。这种场景就适合使用jwt) * 而由于jwt具有一次性的特性。单点登录和会话管理非常不适合用jwt,如果在服务端部署额外的逻辑存储jwt的状态,那还不如使用session。基于session有很多成熟的框架可以开箱即用,但是用jwt还要自己实现逻辑。

  • 单点登陆(Single Sign On)

实战分析

常用方式

  • AJAX之XHR

    • XHR:XMLHttpRequest
    • readyState
  • AJAX之Fetch

    • XMLHttpRequest的升级版
    • 使用Promise
    • 模块化设计,Response、Request、Header对象
    • 通过数据流处理对象,支持分块读取
  • 标砖库:HTTP/HTTPS

    • 默认模块,无需安装其他依赖
    • 功能有限/不是十分友好
  • 常用请求库 axios

    • 支持浏览器、nodejs环境
    • 丰富的拦截器

网络优化

稳定性

  • 重试是保证稳定的有效手段,但要防止家具恶劣情况
  • 缓存合理使用,作为最后一道防线

通信方式

  • WebSocket

    • 浏览器与服务器进行全双工通讯的网络技术
    • 典型场景:实时性要求高,例如聊天室
    • URL使用ws://或wss://等开头
  • QUIC:Quick UDP Internet Connection