HTTP实用指南 | 青训营

76 阅读3分钟

一、什么是HTTP

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

二、协议分析——报文、发展

2.1methed

支持几种不同的请求命令,这些命令被称为http方法,每个http报文都包含一个方法,这个告诉服务器要做什么

  • GET POST PUT DELETE HEAD CONNECT OPTIONS TRACE PATCH
  • safe 安全的:不会修改服务器数据的方法
  • idempotent 幂等:同样的请求被执行一次与连续执行多次的效果是一样的 服务器的状态是一样的,所有safe的方法都是idempotent的

2.2 状态码

每条HTTP响应报文成功返回时都会携带一个状态码。状态码是一个三位数字的代码,告知服务器的响应结果状态,或者需要采取其他的行动。具体要查看有哪些状态码随时去网上查找,有很多相关的资料。

  • 200 OK-客户端请求成功
  • 301-资源被永久转移到其他URL
  • 302-临时跳转
  • 401unauthorized-请求未经授权
  • 404-请求资源不存在,可能是输入了错误的URL
  • 500-服务器内部发生了不可预期的错误
  • 504-网关或代理的服务器无法在规定时间内获得想要的响应

2.3 RESTful API

一种API的设计风格

  • 每个URL代表一种资源
  • 客户端与服务器之间,传递这种资源的某种表现层
  • 客户端通过HTTP method,对服务器资源进行操作,实现“表现层状态转化”

2.4 常用请求头、响应头

accept、connect-type等

2.5 缓存

是一种特殊的HTTP代理服务器, 他可以将经过代理传送的常用文档复制保存起来。下个请求就可以直接利用这个缓存中的副本咯。他的好处就是,客户端从比     较近的缓存下载比从服务器下载速度提高很多,同时也降低了服务器负载。

  1. 强缓存:
  • Expires, 时间戳
  • Cache-Control
    ●可缓存性
    ●no-cache :协商缓存验证
    ●no-store :不使用任何缓存
    ●到期
    ●max-age :单位是秒,存储的最大周期,相对于请求的时间
    ●重新验证*重新加载
    ●must-revalidate :一旦资源过期,在成功向原始服务器验证之前,不能使用
  1. 协商缓存
  • Etag/if- None-Match :资源的特定版本的标识符,类似于指纹
  • Last-Modified/if-Modified-Since :最后修改时间

2.6HTTP/2概述

2.6.1

  • 消息:与逻辑请求或响应信息对应完整的一系列帧
  • 数据流:已建立的连接内的双向字节流,可以承载一条或多条信息
  • 交错发送,接收方重组织

2.6.2

  • HTTP/2连接是永久的,而且仅需要每个来源一个连接
  • 流控制:组织发送方向接收方发送大量数据的机制
  • 服务器推送

2.6.3 https

  • 经过TSL/SSL加密
  • 对称加密:加密和解密使用同一款密钥
  • 非对称加密:加密和解密需要使用两个不同的密钥:公钥和私钥

三、场景分析

3.1 静态资源

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

3.2 登录

四、实战

浏览器篇

  • 使用promise
  • 模块化设计
  • 通过数据流处理对象 支持分块读取

node篇

标准库:HTTP/HTTPS

  • 默认模块,无需安装其他依赖
  • 功能有限/不是很友好

常用请求库axios

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