HTTP实用指南 | 青训营笔记

98 阅读5分钟

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

一、初识HTTP

1.1 什么是HTTP

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

1.2 HTTP应用的过程

屏幕截图 2022-08-03 195703.jpg

二、HTTP协议分析

2.1HTTP的发展

HTTP最初只能请求GET,也只能响应HTML文档,属于单行协议,之后增加了Header,有了状态码并支持多种文档类型,再之后HTTP发展为标准化协议并逐渐有了更优异的表现。

屏幕截图 2022-08-03 204920.jpg

2.2 HTTP报文

HTTP请求报文分四部分组成,分别是:请求行、请求头、空一行、请求体;

以HTTP/1.1标准化协议为例:

屏幕截图 2022-08-03 210007.jpg

Method(请求方法)

  • safe(安全):不会修改服务器数据的方法
  • Idempotent(幂等):同样的请求被执行一次和连续执行多次的效果时一样的,服务器的状态也是一样
  • 所有safe的方法都是Idempotent的

Method的常用请求方法

GET:请求一个指定资源的表示形式.使用GET的请求应该只被用于获取数据.

POST:用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用

PUT:用请求有效载荷替换目标资源的所有当前表示

DELETE:删除指定的资源

HEAD:请求一个与GET请求的响应相同的响应,但没有响应体

CONNECT:建立一个到由目标资源标识的服务器的隧道。

OPTIONS:用于描述目标资源的通信选项。

TRACE:沿着到目标资源的路径执行一个消息环回测试。

PATCH:用于对资源应用部分修改。

状态码

状态码一般由三位数组成:

屏幕截图 2022-08-03 211659.jpg

RESTful API

RESTful API:一种API设计风格

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

常用请求头

屏幕截图 2022-08-03 212404.jpg

常用响应头

屏幕截图 2022-08-03 212500.jpg

2.3 缓存

HTTP缓存分为强缓存协商缓存

强缓存与协商缓存区别:

  1. 如果浏览器命中强缓存,则不需要给服务器发送请求,尽管会返回请求状态码200;

  2. 协商缓存有服务器决定是否使用缓存,客户端和服务器之间会发生一次通讯,如果命中协商缓存,则服务器返回304。

强缓存

强缓存:在浏览器第一次发起请求时,本地无缓存,向web服务器发送请求,服务器起端响应请求,浏览器端缓存。

强缓存会根据返回头中的Expires 或者 Cache-Control 两个字段来控制的,都是表示资源的缓存有效时间。如果 Cache-Control与 Expires 同时存在的话, Cache-Control 的优先级高于 Expires 。

协商缓存

协商缓存:由服务器来确定缓存资源是否可用,所以客户端与服务器端要通过某种标识来进行通信,从而让服务器判断请求资源是否可以缓存访问。

屏幕截图 2022-08-04 163127.jpg

浏览器缓存流程

屏幕截图 2022-08-04 164054.jpg

2.4 HTTP/2概述

概述:更快、更稳定、更简单

  • HTTP/2通信的最小单位是,每个帧都包含帧头,至少会标识出当前帧所属的数据流
  • HTTP/2采用二进制
  • 消息:与逻辑请求或相响应消息对应的完整一系列帧
  • 数据流:已建立的连接内的双向字节流
  • 采用交错发送,接收方重组织
  • HTTP/2连接是永久的,且仅需每个来源的一个连接

2.5 HTTPS概述

  • HTTPS: Hypertext Tranfer Protocol Secure
  • 经过TSL/SSL加密
  • 对称加密:加密和解密使用同一密钥
  • 非对称加密:加密和解密需要使用两种密钥:公钥私钥

屏幕截图 2022-08-04 165422.jpg

三、HTTP使用场景

3.1 浏览器篇:AJAX

1. 是前后台交互的能⼒ 也就是我们客户端给服务端发送消息的⼯具,以及接受响应的⼯具

2. AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

3. AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

4. 是⼀个 默认异步执⾏机制的功能,AJAX分为同步(async = false)和异步(async = true

XHR

屏幕截图 2022-08-04 170239.jpg

Fetch

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

屏幕截图 2022-08-04 170555.jpg

3.2 node篇

标准库:HTTP/HTTPS

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

image.png

3.3 实际应用

常用的请求库:axios

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

image.png

3.4 用户体验

网络优化

image.png

稳定性

image.png

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

四、个人总结

今天是我在青训营学习的第7天,今天讲的主要内容是关于HTTP的具体使用方法的介绍,详细讲解了HTTP的发展、应用的过程,同时也列举了HTTP在实际应用场景下的操作,主要针对前端所需要了解的一些HTTP的基本原理,想要了解更多并运用还需要在课下查阅资料自主学习。