这是我参与「第四届青训营 」笔记创作活动的第5天
一、初识HTTP
1.1 什么是HTTP
- Hyper Text Transfer Protocol(超文本传输协议)
- 应用层协议、基于TCP协议
- 请求、响应
- 简单可扩展
- 无状态
1.2 HTTP应用的过程
二、HTTP协议分析
2.1HTTP的发展
HTTP最初只能请求GET,也只能响应HTML文档,属于单行协议,之后增加了Header,有了状态码并支持多种文档类型,再之后HTTP发展为标准化协议并逐渐有了更优异的表现。
2.2 HTTP报文
HTTP请求报文分四部分组成,分别是:请求行、请求头、空一行、请求体;
以HTTP/1.1标准化协议为例:
Method(请求方法)
- safe(安全):不会修改服务器数据的方法
- Idempotent(幂等):同样的请求被执行一次和连续执行多次的效果时一样的,服务器的状态也是一样的
- 所有safe的方法都是Idempotent的
Method的常用请求方法
GET:请求一个指定资源的表示形式.使用GET的请求应该只被用于获取数据.
POST:用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用
PUT:用请求有效载荷替换目标资源的所有当前表示
DELETE:删除指定的资源
HEAD:请求一个与GET请求的响应相同的响应,但没有响应体
CONNECT:建立一个到由目标资源标识的服务器的隧道。
OPTIONS:用于描述目标资源的通信选项。
TRACE:沿着到目标资源的路径执行一个消息环回测试。
PATCH:用于对资源应用部分修改。
状态码
状态码一般由三位数组成:
RESTful API
RESTful API:一种API设计风格
- 每一个URI代表一种资源
- 客户端和服务器之间传递这种资源的某种表现层
- 客户端通过HTTP method,对服务端资源进行操作,实现“表现层状态转化”
常用请求头
常用响应头
2.3 缓存
HTTP缓存分为强缓存和协商缓存
强缓存与协商缓存区别:
-
如果浏览器命中强缓存,则不需要给服务器发送请求,尽管会返回请求状态码200;
-
协商缓存有服务器决定是否使用缓存,客户端和服务器之间会发生一次通讯,如果命中协商缓存,则服务器返回304。
强缓存
强缓存:在浏览器第一次发起请求时,本地无缓存,向web服务器发送请求,服务器起端响应请求,浏览器端缓存。
强缓存会根据返回头中的Expires 或者 Cache-Control 两个字段来控制的,都是表示资源的缓存有效时间。如果 Cache-Control与 Expires 同时存在的话, Cache-Control 的优先级高于 Expires 。
协商缓存
协商缓存:由服务器来确定缓存资源是否可用,所以客户端与服务器端要通过某种标识来进行通信,从而让服务器判断请求资源是否可以缓存访问。
浏览器缓存流程
2.4 HTTP/2概述
概述:更快、更稳定、更简单
- HTTP/2通信的最小单位是帧,每个帧都包含帧头,至少会标识出当前帧所属的数据流
- HTTP/2采用二进制
- 消息:与逻辑请求或相响应消息对应的完整一系列帧
- 数据流:已建立的连接内的双向字节流
- 采用交错发送,接收方重组织
- HTTP/2连接是永久的,且仅需每个来源的一个连接
2.5 HTTPS概述
- HTTPS: Hypertext Tranfer Protocol Secure
- 经过TSL/SSL加密
- 对称加密:加密和解密使用同一密钥
- 非对称加密:加密和解密需要使用两种密钥:公钥和私钥
三、HTTP使用场景
3.1 浏览器篇:AJAX
1. 是前后台交互的能⼒ 也就是我们客户端给服务端发送消息的⼯具,以及接受响应的⼯具
2. AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
3. AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。
4. 是⼀个 默认异步执⾏机制的功能,AJAX分为同步(async = false)和异步(async = true)
XHR
Fetch
- XHR的升级版
- 使用Promise
- 模块化设计,Reaponse、Request、Header对象
- 通过数据流处理对象,支持分块读取
3.2 node篇
标准库:HTTP/HTTPS
- 默认模块,无需安装其他依赖
- 功能有限/不是十分友好
3.3 实际应用
常用的请求库:axios
- 支持浏览器、nodejs环境
- 拥有丰富的拦截器
3.4 用户体验
网络优化:
稳定性:
- 重试是保证稳定的有效手段,但要防止加剧恶劣情况
- 缓存合理使用,作为最后一道防线
四、个人总结
今天是我在青训营学习的第7天,今天讲的主要内容是关于HTTP的具体使用方法的介绍,详细讲解了HTTP的发展、应用的过程,同时也列举了HTTP在实际应用场景下的操作,主要针对前端所需要了解的一些HTTP的基本原理,想要了解更多并运用还需要在课下查阅资料自主学习。