初识HTTP | 青训营笔记

104 阅读2分钟

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

本篇笔记是对今天青训营的HTTP课程的归纳总结及个人感悟。

一、初识

1, HTTP 协议
  • 超文本传输协议

  • 应用层协议,基于TCP协议

  • 请求响应两部分

  • 简单可扩展

  • 无状态:没有记忆能力,每个请求都是独立的

2, 发展

最初的HTTP/0.9单行协议,请求GET/mypage.html,响应只有HTML文档

现在HTTP/3草案

二、协议分析

1, 方法
  • Safe Methods  不会修改服务器的数据的方法, GET/HEAD/OPTIONS

  • Idempotent(幂等) Methods 同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态样式一样的, GET/HEAD/OPTIONS/PUT/DELETE

  • 所有safe的方法都是idempotent的

2, 缓存
A 强缓存:

Expires,时间戳

Cache-Control:

a 可缓存性:

1. No-cache 协商缓存验证

2. No-store 不使用任何缓存

b 到期:

Max-age 单位是秒,存储的最大周期,相对于请求的时间

c 重新验证 * 重新加载

Must-revalidate 一旦资源过期,在成功向原始服务器验证之前,不能使用
B协商缓存
  • Etag/If-None-Match 资源的特定版本的标识符,类似于指纹

  • Last-Modified/If-Modified-Since 最后修改时间

3, HTTPS
  • 经过TSL/SSL加密

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

  • 非对称加密 加密和解密需要使用两个不同的密钥 公钥和私钥

 

三、场景分析

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

CDN:Content Delivery Network

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

 

四、一些实战案例

AJAX:

XHR:

  • UNSET 代理被创建,但尚未调用open()方法

  • OPENED open()方法已被调用

  • HEADERS_RECEIVED send()方法已被调用,并且头部和状态已可获得

  • LOADING 下载中,responseText属性已经包含部分数据

  • DONE 下载操作已完成

Fetch :

  • XMLHttpRequet的升级版

  • 使用Promise

  • 模块化设计,Response,Request,Header对象

  • 通过数据流处理对象,支持分块读取

Node:
  • 标准库:HTTP/HTTPS

  • 默认模块,无需安装其他依赖

  • 功能有限/不是十分友好

  • 常用的请求库:axios

  • 支持浏览器、nodejs环境

  • 丰富的拦截器