Day7 HTTP实用指南 | 青训营

53 阅读5分钟

了解HTTP

HTTP模型.png

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

协议分析

发展历程

HTTP 发展历程.png

报文

HTTP 报文.png

Method

  • GET 请求一个指定资源的表示形式。使用GET的请求应该只被用于获取数据。
  • POST 用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用
  • PUT 用请求有效载荷替换目标资源的所有当前表示
  • DELETE 删除指定的资源
  • HEAD 请求一个与GET请求的响应相同的响应,但没有响应体
  • CONNECT 建立一个到由目标资源标识的服务器的隧道。
  • OPTIONS 用于描述目标资源的通信选项。
  • TRACE 沿着到目标资源的路径执行一个消息环回测试。
  • PATCH 用于对资源应用部分修改。

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

状态码

状态码.png

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

RESTfulAPI

RESTful API: 一种API设计风格;REST - Representational State Transfer

  1. 每一个URI代表一种资源;
  2. 客户端和服务器之间,传递这种资源的某种表现层;
  3. 客户端通过HTTP method, 对服务器端资源进行操作,实现"表现层状态转化"。 RESTful API.png

常用请求头

请求头.png

常用响应头

响应头.png

缓存

强缓存

  • Expires, 时间戳
  • Cache-Control
    • 可缓存性
      • no-cache:协商缓存验证
      • no-store:不使用任何缓存
  • 到期
    • max-age: 单位是秒,存储的最大周期,相对于请求的时间
  • 重新验证*重新加载
    • must-revalidate: 一旦资源过期,在成功向原始服务器验证之前,不能使用

协商缓存

  • Etag/If-None-Match: 资源的特定版本的标识符,类似于指纹
  • Last-Modified/If-Modified-Since: 最后修改时间

缓存.png

cookie

cookie.png

发展

HTTP/2

HTTP/2概述:更快、更稳定、更简单

  • 帧(frame): HTTP/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。
  • 二进制编码
  • 消息:与逻辑请求或响应消息对应的完整的一系列帧。
  • 数据流:已建立的连接内的双向字节流可以承载一条或多条消息。
  • 交错发送,接收方重组织
  • HTTP/2连接都是永久的,而且仅需要每个来源一个连接
  • 流控制:阻止发送方向接收方发送大量数据的机制
  • 服务器推送

HTTPS

  • HTTPS Hypertext Transfer Protocol Secure
  • 经过TSL/SSL加密 加密
    • 对称加密:加密和解密都是使用同一个密钥
    • 非对称加密,加密和解密需要使用两个不同的密钥:公钥(public key)和私钥(private key) HTTPS.png

常见场景

静态资源

静态资源方案:缓存 + CDN + 文件名hash

  • CDN:Content Delivery Network
  • 通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务

场景分析

登录

  • 业务场景
    • 表单登录
    • 扫码登录
  • 技术方式
    • SSO(单点登录)

跨域

登录.png 跨域CORS (Cross-Origin Resource Sharing)

  • 预请求:获知服务端是否允许该跨源请求(复杂请求)
  • 相关协议头
    • Access-Control-Allow-Origin
    • Access-Control-Expose-Headers
    • Access-Control-Max-Age
    • Access-Control-Allow-Credentials
    • Access-Control-Allow-Methods
    • Access-Control-Allow-Headers
    • Access-Control-Request-Method
    • Access-Control-Request-Headers
    • Origin

跨域解决方案

  • CORS
  • 代理服务器
    • 同源策略是浏览器的安全策略,不是HTTP的
  • Iframe
    • 诸多不便

鉴权

  • Session + cookie
  • JWT(JSON web token)

鉴权,jwt.png

实际应用

浏览器

AJAX —— XHR

  • XHR:XMLHttpRequest
  • readyState ready State.png

AJAX —— Fetch

  • XHR升级版
  • 使用Promise
  • 模块化设计,Response,Request,Header对象
  • 通过数据流处理对象,支持分块读取

node

  1. 标准库:HTTP/HTTPS
    • 默认模块,无需安装其他依赖
    • 功能有限/不是十分友好
  2. 常用请求库:axios
    • 支持浏览器、nodejs环境
    • 丰富的拦截器

用户体验

网络优化

网络优化.png

稳定性

  1. 重试机制(保证稳定的有效手段,但要防止加剧恶劣情况)
    • 超时
    • 错误
  2. 缓存(合理使用,作为最后一道防线)
  3. 数据安全
    • HTTPS
    • 劫持

拓展

WebSocket

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

QUIC

QUIC:Quick UDP Internet Connection

  • 0-RTT建联(首次建联除外)。
  • 类似TCP的可靠传输。
  • 类似TLS的加密传输,支持完美前向安全。
  • 用户空间的拥塞控制,最新的BBR算法。
  • 支持h2的基于流的多路复用,但没有TCP的HOL问题。
  • 前向纠错FEC。
  • 类似APTCP的Connection migration。

总结

本节课详细介绍了http协议相关内容,认识了http协议,也对协议尤其是报文部分进行了具体分析并以实际场景展现http的实际应用。