HTTP 使用指南 | 青训营笔记

69 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

以下为今日课上笔记内容

一. 初识HTTP。

在地址栏输入一些字符串会跳转出来一个页面,在这个过程中发生了什么?

e96ce9e163691d359e562fa1dde60c9.png

大致分析: e6fd7ec5ee831a789ab188551ffea1e.png

1.什么是HTTP?

1)Hyper Text Transfer Protocol超文本传输协议

2)应用层协议,基于TCP协议

3)请求 响应

4)简单可扩展

5)无状态 c7f13614bfaf982c74a4e521951db53.png

二.协议分析

发展

8ee0dd0c8d9ee6b4aed646ca0b56ea6.png

1)报文

81dbd46d9115776cadcf1bab497452c.png

  • Method的含义

98f60511363c0a733db0f0071715060.png

Safe(安全的):不会修改服务器的数据的方法

GET HEAD OPTIONS

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

所有safe的方法都是Idempotent 的

GET HEAD OPTIONS PUT DELETE

  • 状态码

a41c306f2b02a85038ab3cf2863285d.png

  • RESTful API

RESTful APl:一种API设计风格;REST-RepresentationalState Transfer

1)每一个URI代表一种资源

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

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

b7ee0f804ff92e297c5344131bafec1.png

658edc42b9a706445e3b3ee856c851f.png

9f0ed5c62eb0eba8d19721c7afe0d04.png

  • 缓存

476e5352cd3742bf04f7e3286f14c32.png

大致流程

0bc580572a00697c78ab246abc61aad.png

  • cookie Set-Cookie -response

983838b53b52f49d1729236c595d7fd.png

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

①帧(frame):HTTP/2通信的最小单位每个帧都包含帧头,至少也会标识出当前帧所属的数据流

②二进制

0947afa0fd8411751a3bcb6174b82fd.png

③消息:与逻辑请求或响应消息对应的完整的一系列帧

④数据流:已建立的连接内的双向字节流可以承载一条或多条消息

⑤交错发送,接收方重组织

b0204e7db398322c5c51b578b063bb8.png

⑥HTTP/2 连接都是永久的,而且仅需要每个来源一个连接

⑦流控制:阻止发送方向接收方发送大量数据的机制

⑧服务器推送

76496c791c61f7e0ee9cfdefcb2ac9c.png

3)HTTPS概述

①HTTPS: Hypertext TransferProtocol Secure

②经过TSL/SSL加密

③对称加密: 加密和解密都是使用同一个密钥

④非对称加密,加密和解密需要使用两个不同的密钥:公钥 (public key)和私钥(private key)

fa687e82104ae35296d2af5a7fa3621.png

18a57e29dfed103f101109731e2c7f7.png

三.场景分析

1.打开chrome

2.输入 www.toutiao.com

3.打开控制台

  • 右键->检查
  • F12

4.切换到network

  • 静态资源
  • 登陆

8819d1aaac791c68b37361eb7c566f6.png

1)静态资源

3a4e44df5c75db31b90aef1f0eeaba2.png

并没有 而是从本地缓存拿响应

030123f4fe8ba138735144df62ea46e.png

缓存策略是怎样的?

  • 强缓存
  • Cache-control:一年

还有什么信息吗?

  • 允许所有域名访问
  • 资源类型: css

60d66809c381aac95f3b011cb8f0a96.png

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

  • CDN: Content Delivery Network

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

220caa768740e78a1698f1f9e30b031.png

2)登录

  • 业务场景

表单登录

扫码登录

  • 技术方式

SSO

4b1e6b519443cc2fd78fd67f7c714d7.png

账号密码登陆

打开控制台-network -勾选 preserve log - 过滤quick_login

观察请求

93049c015a34f004cedd232307c5ec8.png

第一个请求

20af6993155c437f31c572e1cabc44d.png

跨域

9b10b30ceb5ceed793cdfd3f5a3bb42.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-MethodsAccess-Control-Allow-Headers

Access-Control-Request-Method。Access-Control-Request-Headers

Origin

808ccbe9d4bb87aa063f5c68b9febd8.png

跨域解决方案

  • CORS

  • 代理服务器

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

  • Iframe

诸多不便

72d4353afe82bb9e4de04bc30456858.png

20be2192ca1d02acb8afe420adb18c4.png

1.向什么地址做了什么动作?

  • 使用POST方法
  • 目标域名 https: //sso.toutiao.com
  • 目标path /quick_login/v2/

2.携带了哪些信息,返回了哪些信息

  • 携带信息

Post body,数据格式为form希望获取的数据格式为json

已有的cookie

  • 返回信息

数据格式json

种cookie的信息

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

f6391ec20eee26b7b0b998758926800.png

点击右上角-发文章 跳转后的网站为什么自动登录?

4371d8b21780364fbed94aeb24e6ecf.png

SSO:单点登录 (Single Sign On)

43a51731f03cda65e0fd5845461d2de.png

四.实战

1.浏览器篇

1)AJAX之XHR a0aa077a4824fa392d8c99bdbc6aeb7.png

2)AJAX之Fetch

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

9bfc765c891c76ebd2b8c4c4b4d7728.png

2.node篇

标准库: HTTP/HTTPS

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

3205f7b0a1d1bba840b96cf7c5997f4.png

常用的请求库:axios

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

339ae0342af9d70e3a276e6507f566f.png

网络优化

ade126584cabe16fce586902fea140d.png

稳定性

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

五.了解更多

1.扩展-通信方式

WebSocket

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

0f2fbe24754d0c93039febb73573344.png

QUIC: Quick UDP Internet Connection

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

dad507eaddacad5446827c16b45c110.png

5f055304b52b29605b342c36fd2c30e.png