HTTP使用指南 | 青训营笔记

91 阅读4分钟

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

今日学习内容为:HTTP使用指南

一、初识HTTP

经典面试题:从输入网址到渲染完毕,中间发生了什么?

即:解释HTTP流程

  1. 浏览器解析url地址,并查找自身缓存
  2. 若缓存未命中,则查找操作系统缓存
  3. 若仍未命中,则发起DNS,获取目标服务器ip地址
  4. 根据收取到的ip地址,建立TCP连接
  5. 客户端发起HTTP请求
  6. 服务端收到请求,响应数据
  7. 客户端收到请求,并存入自身缓存
  8. 关闭TCP连接

image.png

什么是HTTP:超文本传输协议,处于应用层,基于TCP协议,请求-响应式,简单可扩展,无状态

二、协议分析

image.png

1. 报文结构分析:

请求报文:

Method Path HTTP-Version
HTTP Headers
Empty Line
Body

响应报文:

Version StatusCode StatusMessage
HTTP Headers
Empty Line
Body

image.png

根据RFC规范:

  • 安全:不会修改服务器数据的方法GET、HEAD、OPTIONS
  • 幂等:同样的请求被执行一次和连续执行多次的效果是一样的,服务器的状态也是一样的。所有安全的方法都是幂等的。GET、HEAD、OPTIONS、PUT、DELETE

2. 状态码

image.png

更多详细的HTTP状态码:

  1. 201:Created,请求已被成功处理
  2. 204:No Content,客户不需要离开当前页面
  3. 206:Partial Content,主题包含所请求的数据区间
  4. 304:Not Modified,缓存相关
  5. 307:Temporary Redirect,临时重定向
  6. 501:Not Implemented,服务器不支持的请求
  7. 502:Bad Gateway:网关从上游接收到的响应无效
  8. 503:Service Unavailable,服务器尚未处于可以接受请求的状态

RESTful API:一种API风格Representational State Transfer

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

3. Headers

image.png

image.png

4. 缓存

image.png

5. cookie

image.png

6. HTTP2概述

HTTP2最小通信单位:,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。更快、更稳定、更简单

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

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

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

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

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

7. HTTPS

加密方式:

  • 对称加密:加密和解密都是使用同一个密钥
  • 非对称加密:加密和解密需要使用两个不同的密钥:公钥(Public Key)私钥(Private Key)

三、场景分析

Q:状态码200一定发起了请求吗?

不一定。from disk cache表示从缓存中获取数据

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

image.png

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

跨域

同源策略:协议名 + 主机 + 端口号相同

如果三者有任一不同,则会发生跨域

跨域解决方案:

  1. CORS

    image.png

  2. 代理服务器:同源策略是浏览器的安全策略,而非HTTP的

    image.png

  3. Iframe:有诸多不便,不使用

登陆

记住登陆状态:登录鉴权

  • Cookie + Session:

    image.png

  • JWT(Json Web Token)

    image.png

SSO单点登录

image.png

四、实战

1. 浏览器篇

AJAXXHRXMLHttpRequest

image.png

AJAXfetch

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

2. node篇

  • 标准库:HTTP/HTTPS:默认模块,无需安装其他依赖;功能有限,不是特别友好
  • axios:支持浏览器、node环境,丰富的拦截器

3. 用户体验

网络优化方面:

image.png

稳定性方面:

image.png

重试是保证稳定的有效手段,但要防止加剧恶劣情况

缓存合理使用,作为最后一道防线

五、了解更多

WebSocket

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

image.png

image.png

QUIC

image.png

image.png