HTTP使用 | 青训营笔记

79 阅读3分钟

HTTP使用指南

初识HTTP

image.png发生了什么?image.png

什么是HTTP

image.png

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

协议分析

发展

image.png

报文

image.pngimage.pngimage.pngimage.png

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

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

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

image.pngimage.pngimage.pngimage.pngimage.pngimage.png

发展

image.pngimage.pngimage.pngimage.pngimage.png

场景分析

场景分析

image.png

  1. 打开chrome

  2. 输入:www.toutiao.com

  3. 打开控制台

    • 右键 → 检查
    • F12
  4. 切换到network

  • 静态资源
  • 登录

静态资源

image.pngimage.pngimage.pngimage.png静态资源方案:缓存 + CDN + 文件名hash

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

登录

image.png

  • 业务场景

    • 表单登录
    • 扫码登陆
  • 技术方式

    • SSO

image.png

  • 账号密码登录
  • 打开控制台 - network -勾选 preserve log - 过滤quick_login
  • 观察请求

image.png为什么会有options的请求?

  • 跨域,cross-origin

image.png

跨域

image.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-Methid
    • Access-Control-Request-Headers
    • Origin

跨域解决方案:

  • CORS

  • 代理服务器

    • 同源策略是浏览器的安全策略,不是HTTP的
  • Iframe

    • 诸多不便

登录

image.png

  1. 向什么地址做了什么动作?
  • 使用POST方法
  • 目标域名 sso.toutiao.com
  • 目标path/quick_login/v2/
  1. 携带了哪些信息,返回了那些信息
  • 携带信息

    • Post body,数据格式为form
    • 希望获取的数据格式为json
    • 已有的cookie
  • 返回信息

    • 数据格式json
    • 种cookie的信息

下一次进入页面为什么能记住登录态呢?image.png

  • SSO:单点登录(Single Sign On)

image.png

实战

浏览器篇

image.pngAJAX之Fetch

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

image.png

node篇

标准库:HTTP/HTTPS

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

image.png

常见的请求库:axios

  • 支持浏览器、node.js环境
  • 丰富的拦截器

image.png

用户体验

image.pngimage.png

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

了解更多

拓展 - 通信方式

WebSocket

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

image.png

QUIC:Quick UDP Internet Connection

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

image.pngimage.png