HTTP实用指南(下)| 青训营笔记

199 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第8天

👋本文接着HTTP实用指南(上)继续总结,分为部分:1. 场景分析 2. 实战 3.了解更多

场景分析

😁 静态资源 | 登录

场景分析——静态资源

  1. 打开控制台(右键->检查)
  2. 切换到network

Snipaste_2022-08-01_12-32-17.png

🤔状态码200,一定发起了请求吗?

在状态码旁边有一个(from disk cache),说明这个请求是本地缓存拿到的响应,而没有真实经过“从浏览器发起——>网络传输——>服务器——>返回”的链路

🤔为什么可以在本地缓存拿到响应呢?

Snipaste_2022-08-01_12-43-44.png 图中显示了缓存策略:

  • 强缓存
  • Cache-control:一年

扩展:静态资源部署上的方案

静态资源部署上的方案:缓存 + CDN(让用户很快地拿到资源) + 文件名 hash(让用户拿到最新的资源)

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

Snipaste_2022-08-01_12-50-55.png

场景分析——登录

  • 业务场景:表单登录、扫码登录
  • 技术方式:SSO

操作:

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

Snipaste_2022-08-01_14-59-48.png

🤔为什么有options的请求

跨域,cross-origin(跨域导致出现options请求)

Snipaste_2022-08-01_15-02-24.png

跨域的解决方案

  1. CORS

Snipaste_2022-08-01_15-08-20.png

  1. 代理服务器(常见)

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

Snipaste_2022-08-01_15-08-07.png

  1. Iframe(极少)

    • 诸多不便

POST请求

Snipaste_2022-08-01_15-12-13.png

  1. 向什么地址做了什么动作?
  1. 携带了哪些信息,返回了哪些信息
  • 携带信息

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

Snipaste_2022-08-01_15-16-37.png

  • 返回信息

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

Snipaste_2022-08-01_15-16-41.png

🤔下一次进入页面为什么能记住登陆态呢?

那就涉及到鉴权的方案了:

  • Session +cookie
  • JWT(JSON web token)

🤔有时候我去了一个不同域名的网站,但是我登录的状态被自动带过来了(跳转后的网站会自动登录),这是为什么?

SSO:单点登录(Single Sign On)

Snipaste_2022-08-01_15-25-32.png

实战

😁 浏览器/nodejs | 常用库
怎么去发起HTTP协议

实战——浏览器篇

AJAX之XHR

Snipaste_2022-08-01_15-28-10.png

具体的封装

Snipaste_2022-08-01_15-28-18.png

AJAX之Fetch

  • XMLHttpRequet的升级版
  • 使用Promise (缓解回调地狱)
  • 模块化设计,Response,Request,Header对象
  • 通过数据流处理对象,支持分块读取

具体的封装

Snipaste_2022-08-01_15-31-51.png

实战——node篇

标准库:HTTP/HTTPS

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

使用方式

Snipaste_2022-08-01_15-33-35.png

常用的请求库:axios

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

具体封装

Snipaste_2022-08-01_15-33-50.png

网络优化的手段

Snipaste_2022-08-01_15-36-57.png

稳定性考虑的方面

Snipaste_2022-08-01_15-38-51.png

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

了解更多

😁 WebSocket | QUIC

扩展

WebSocket(通信方式)

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

QUIC:Quick UDP Internet Connection

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

Snipaste_2022-08-01_15-44-33.png