初识 HTTP协议 | 青训营笔记

50 阅读3分钟

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

课程重点

  1. HTTP协议的基本定义
  2. HTTP协议主要特征
  3. HTTP协议发展历程
  4. HTTP协议的报文结构

初识HTTP协议

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

image.png

image.png

协议分析-发展

image.png

协议分析-报文

Method

  • GET 请求一个指定资源的表示形式,使用GET的请求应该只被用于获取数据
  • POST 用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用
  • PUT 用于请求有效载荷替换目标资源的所有当前表示
  • DELETE 删除指定的资源
  • HEAD 请求一个与GET请求的响应相同的响应,但没有响应体
  • CONNECT 建立一个到由目标资源的通信选项
  • OPTIONS 用于描述目标资源的通信选项
  • TRACE 沿着到目标资源的路径执行一个消息环回测试
  • PATCH 用于对资源应用部分修改

image.png

Safe(安全的):不会修改服务器的数据的方法,如,GET、HEAD、OPTIONS

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

所有safe的方法都是Idempotent的,如,GET、HEAD、OPTIONS、PUT、DELETE

状态码

image.png

RESTful API

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

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

image.png

常用请求头

image.png

缓存

  • 强缓存
  • 协商缓存

image.png

image.png

cookie

image.png

HTTP/2概述

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

  • 帧:HTTP/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流
  • 消息:与逻辑请求或响应消息对应的完整的一系列帧
  • 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息

image.png

  • HTTP/2连接都是永久的,而且仅需要每个来源一个连接
  • 流控制:阻止发送方向接收方发送大量数据的机制
  • 服务器推送

image.png

HTTPS

  • HTTPS:Hypertext Transfer Protocol Secure
  • 经过TSL/SSL加密
  • 对称加密:加密和解密都是使用同一个密钥
  • 非对称加密,加密和解密需要使用两个不同的密钥:公钥和私钥

image.png

HTTP吸引的场景分析

image.png 静态资源

image.png

什么是跨域

image.png

实战

浏览器篇 AJAX之Fetch

  • XMLHttpRequent的升级版
  • 使用Promise
  • 模块化设计,Response、Request、Header
  • 通过数据流处理对象,支持分块读取 image.png node篇
  • 默认模块,无需安装其它依赖
  • 功能有限/不是十分友好

image.png 常用的请求库:axios

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

image.png 网络优化

image.png 稳定性

image.png

扩展-通信方式

WebSocket

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

image.png

image.png

总结

在正式讲解 Http 协议的技术细节前,本节课了解了 Http 协议的基本定义和特点,在此基础上,对于 Http 协议的发展历程及报文结构展开进一步分析。

在本节课中学习了 HTTP 真实的场景实践,以「今日头条」浏览器为例,展示线上的 demo,对于该案例涉及的请求中的缓存策略展开具体分析。

在对 HTTP 协议的定义及使用场景解析的讲解完成后,本节课将根据不同的环境,学习在日常的开发中,如何实现去发起一个协议,将重点带来浏览器环境的应用实战,进一步基于不同环境下,如何做到网络优化,提升用户体验。