web协议详解与抓包实战课程笔记

使用 ABNF 操作符来描述HTTP请求头

  • 空白字符:用来分隔定义中的各个元素

    • method SP request-target SP HTTP-version CRLF·
  • / 表示选择

    • start-line = request-line/status-line
  • 值范围 %c##-##

    • OCTAL = “0” / “1” / “2” / “3” ..
  • 序列组合 (),视为单个元素

  • 不定量重复

    • * 元素表示零个或者是多个 *(header-filed CRLF)
    • 1* 表示一个或者更多的元素, 2*4 表示两个到四个
  • 可选序列 []
    - [message-body]

image-20231127140324023

image-20231127140349248

1
telnet www.taohui.pub 80

image-20231127143131761

评估web框架的关键属性

image-20231127152402241

  • 性能

    image-20231127152634445

  • 可修改性

    image-20231127152833129

08 没听懂

09如何用network的面板分析HTTP报文

image-20231127155402081

image-20231127155738463

image-20231127160449754

image-20231127160923168

10URI的基本格式以及与RUL的区别

image-20231127162122395

image-20231127162948143

image-20231127163254389

11 为什么要进行URI编码

image-20231127172843274

如何进行转换

image-20231127173236014

12 详解 HTTP的请求行

1
GET / HTTP/1.1

image-20231127174454540

image-20231127174513620

常见的方法

image-20231127174712658

什么是幂等

具体来说,一个幂等操作满足以下条件:

  1. 相同输入产生相同结果: 无论执行多少次,给定相同的输入,操作的结果都是相同的。
  2. 不会引起副作用: 操作的执行不会对系统的状态产生额外的影响。即使多次执行,系统的状态也保持一致。

OPTION的作用,显示服务器对访问的资源支持的方法

1
curl static.taohui.tech -X OPTIONS -I

13 HTTP中的正确响应码

1XX表示请求已经被服务器正确接受到了,但需要进一步的处理才能完成

image-20231127181156232

2XX表示成功处理

image-20231127181457413

image-20231127181920435

3XX表示重定向

image-20231127182216611

image-20231127182350634

14 HTTP的错误响应码

4XX 表示客户端的错误

image-20231127182916151

1
curl www.sina.com.cn -X TRACE -I

image-20231127183123388

image-20231127183240109

image-20231127183421496

5XX表示服务端出现错误

image-20231127183638071

并发连接的限制 503

image-20231127183820882

注意: 若客户端接收到一个再RFC中不存的状态码,会返回一个该状态码的最大整百数,如 接收到277,返回200

15如何管理跨域代理服务器的长短连接

使用 Connection 来表示长短连接的请求和响应,HTTP/1.1 默认支持 长连接;若需要关闭长连接,使用 Connection: close

image-20231127185123310

image-20231127185134825

为了防止 过老版本的服务器不认识 connection字段,我们在连接代理服务器时,使用 proxy-connectio 来代替 connction 字段

image-20231127190017883

16HTTP消息在服务端的路由

image-20231128081723777

image-20231128082109951

建立TCP连接

接受请求

寻找虚拟节点

寻找URI的处理代码

处理URI的处理代码

生成HTTP响应

发送HTTP响应

记录日志

17代理服务器转发消息时的相关头部

image-20231128083315310

正向代理和反向代理的区别

  • 正向代理(Forward Proxy):
  1. 作用: 正向代理作为客户端的代理,代表客户端向服务器发起请求。客户端向正向代理发送请求,然后由正向代理将请求转发给目标服务器,最后将响应返回给客户端。客户端对目标服务器是透明的,目标服务器不知道请求的真正发起者是客户端。
  2. 用途:
    • 访问控制: 正向代理可以用于实现访问控制,限制客户端对特定资源的访问。
    • 安全性: 可以用于隐藏客户端的真实IP地址,提高安全性。
    • 翻墙: 用户可以通过正向代理访问被封锁的内容,从而实现翻墙。
  3. 部署: 正向代理通常部署在客户端和目标服务器之间。
  • 反向代理(Reverse Proxy):
  1. 作用: 反向代理作为服务器的代理,代表服务器向客户端提供服务。客户端向反向代理发送请求,然后由反向代理将请求转发给后端的真实服务器,最后将后端服务器的响应返回给客户端。客户端对后端服务器是透明的,后端服务器不知道请求的真正发起者是客户端。
  2. 用途:
    • 负载均衡: 反向代理可以分发客户端的请求到多个后端服务器,实现负载均衡,提高性能和可用性。
    • 安全性: 可以用于隐藏后端服务器的真实IP地址,提高安全性。
    • SSL 加速: 可以用于解密客户端发来的加密请求,将请求以明文形式转发给后端服务器,从而减轻后端服务器的负担。
  3. 部署: 反向代理通常部署在客户端和后端服务器之间。

总体而言,正向代理和反向代理的主要区别在于代理的对象和作用方向。正向代理代表客户端发起请求,而反向代理代表服务器提供服务。它们在网络架构、安全性、性能优化等方面有不同的应用场景。

image-20231128083413862

image-20231128083813300

18请求与响应的上下文

image-20231128085638018

image-20231128085750173

image-20231128085850807

image-20231128085949904

19内容协商与资源表述

image-20231128090221955

image-20231128090323337

主动式内容协商

image-20231128090639414

响应式内容协商

image-20231128090730329

image-20231128091341804

image-20231128091441809

image-20231128091610167

20HTTP包体的传输方式

定长包体

HTTP的包体格式

image-20231128093043300

image-20231128093815465

不定长包体

没看懂

image-20231128103753892

1
Transfer-Encoding: chunked

image-20231128104752249

image-20231128104811283

MIME multipurpose Internet Mail Extensions

image-20231128104928961

image-20231128105238855

22HTML form表单

HTML中的表单元素

image-20231128131655118

image-20231128131918681

multpart 的使用

23断点续传与多线程下载时如何做到的?

  1. 客户端明确任务:从何处开始下载?
    • 本地是否已有部分文件?
      • 其中已有的部分文件是否被修改过?
    • 使用几个线程并发下载?
  2. 下载文件的指定部分内容
  3. 下载完毕后拼装成统一的文件

使用range来获取文件的部分数据

image-20231128112608337

range的请求范围

image-20231128112729575

range的条件请求

image-20231128113126596

1
curl protocol.taohui.tech/app/letter.txt -H `range: bytes=0-5` -H `if-Match: "5cc78979-1b"` 

请求此资源的 0-5 Bytes,并带上 etag

服务器的响应

image-20231128114522610

image-20231128114656013

image-20231128115049469

24Cookie的格式与约束

cookie HTTP State Management Mechanism

image-20231128143522856

set-ccokie 的属性

image-20231128144414291

cookie的问题

image-20231128144614369

25session的工作原理以及第三方cookie的原理

image-20231128160642287

现在不是有JWT嘛,为什么还要使用 session,session不得需要服务端保存用户的数据嘛?

  • Session 和 JSON Web Token (JWT) 都是在Web开发中用于管理用户状态和身份验证的工具

    • Session:

      1. 服务器端存储: Session 数据通常存储在服务器端。服务器为每个会话分配一个唯一的标识符(通常是通过 cookie 发送到客户端),而实际的数据则存储在服务器上。
      2. 状态管理: Session 适用于需要在服务器端保持状态的情况,例如用户登录状态、购物车内容等。服务器可以灵活管理会话的生命周期和存储方式。
      3. 简单性: Session 在某些情况下可能更容易实现和管理,特别是对于简单的 Web 应用程序。
    • JWT:

      1. 无状态: JWT 是一种无状态的认证机制,信息被包装在令牌中,并由客户端负责存储。服务器无需在其端存储有关令牌的信息,因此可以更容易地进行水平扩展。
      2. 跨域: JWT 适用于分布式系统和跨域通信,因为令牌本身包含了身份验证和授权信息。客户端在每个请求中携带令牌,而服务器只需验证令牌的签名而无需查询状态。
      3. 可扩展性: JWT 可以包含任意 JSON 格式的信息,因此具有良好的可扩展性。令牌可以包含有关用户、角色、权限等的信息。
      4. 前后端分离: JWT 适用于前后端分离的应用程序,因为前端可以存储并发送令牌,而后端只需验证令牌的有效性。
  • 为什么还要使用 Session:

尽管JWT在许多场景中非常有用,但Session仍然具有一些优势:

  1. 生命周期控制: Session 允许服务器更精细地控制会话的生命周期,可以在用户不活动一段时间后自动过期。
  2. 撤销和管理: Session 使得撤销用户的访问权限更加容易,因为可以在服务器端集中管理会话状态。
  3. 传输敏感数据: 有些情况下,特别是在涉及敏感数据传输的情况下,使用服务器端存储的 Session 数据可能更安全。
  4. 适用于某些 Web 框架: 某些Web框架可能更适合使用Session,而不是JWT。

26浏览器同源策略

image-20231129083841286

image-20231129084902875

CSRF Cross-Site Request Fogery 跨域请求伪造

image-20231129085240579

image-20231129085507454

27 通过CORS实现跨域访问

CORS cross-origin resource sharing

image-20231129090450875

image-20231129091514805

image-20231129091746588

30缓存新鲜度的四种计算方式

35网络爬虫的工作原理

image-20231128094915269

image-20231128095031015

image-20231128101213608

wireShark的使用

image-20231129102827785

image-20231129104528133

image-20231129104535899

捕获过滤器

image-20231129112631320

image-20231129133149534

限定词

image-20231129133209213

image-20231129133224348

image-20231129133254890

image-20231129133348787

显示过滤器

image-20231129134157877

image-20231129134350628

image-20231129134420593

切片操作,但与go中的 slice有所区别

image-20231129134550006

可用函数

image-20231129134622541

可以看看显示过滤器

41webSocket

websocket 用于服务端主动推送资源,实现双向通信

websocket具有良好的兼容性

支持扩展

WebSocket 在需要实现实时、低延迟、双向通信的场景中都可以发挥作用。由于它建立在单个持久的 TCP 连接上,相较于传统的轮询技术,WebSocket 可以减少通信开销,提高效率。

image-20231202102433545

image-20231202104805686

image-20231202110129615

70TLS的工作原理

TLS的设计目的

  • 身份验证
  • 数据保密
  • 完整性约束

image-20231130150134251

71对称加密的工作原理

加密过程

image-20231130100134006

XOR 异或运算,XOR的速度非常快,只需要便利一次即可

image-20231130100327770

明文不一定和密钥的长度一致,这时就需要进行分组加密

其次,若最后一个分组的block不够长时,这时需要进行填充

填充方法

image-20231130100621046

上面是直接将明文分解为多个块,对每个快独立加密,但这存在一个问题: 无法隐藏数据的特征

image-20231130104311863

每一个明文块和前一个密文块进行亦或后,再进行加密

image-20231130104907895

实现串行化

image-20231130103630336

实现消息完整性的校验

  • sender

    • 使用hash对源msg1进行处理得到mac1
    • 使用CTR对数据进行加密
  • receiver

    • 使用CTR对加密数据进行解密,得到msg2
    • 使用hash对解密msg2进行处理得到mac2
    • 对比mac1和mac2
    • 若相等,则消息为完整的,可以使用msg2

image-20231130105409189

image-20231130150504144

73AES对称加密算法

AES Advanced Encruption Standard

image-20231130111347305

image-20231130111751753

image-20231130112401456

74非对称加密 RSA

如何将对称加密的密钥传递给双方? 可以使用非对称加密来实现

RSA算法中的公钥私钥的产生

image-20231130113512891

即使 泄露了 公钥,即 (k,n) 若想推导 私钥中的d,则需要推导 n,而n是一个非常大的数字,对一个非常大的数字进行因式分解很难,这也就是为什么难以推导私钥的原因。

非对称加密和解密的过程

image-20231130114022510

使用私钥进行加密,后用公钥进行解密,相当于私钥对明文进行了数字签名

76基于openssl验证RSA算法

77PKI证书体系

  • 基于私钥进行加密,只能使用公钥进行解密,起到身份验证的作用

  • 公钥的管理 public key infrastructure 公钥基础设施

    • 由CA数字证书机构将用户个人身份与公开密钥关联在一起
    • 公钥数字证书组成
      • CA的信息、公钥用户的信息、公钥、权威机构的签名、有效期
    • PKI用户
      • 向CA注册公钥的用户
      • 希望使用已注册公钥的用户

image-20231130143619054

image-20231130144434061

证书类型

image-20231130144330888

77DH密钥交换协议

image-20231130145353116

RSA密钥交换存在问题:若私钥一旦泄露,之前所有的通信内容都可以被解密


web协议详解与抓包实战课程笔记
http://example.com/2023/11/27/web协议详解与抓包实战课程笔记/
作者
Forrest
发布于
2023年11月27日
许可协议