本片笔记适用于 图灵诸葛官方号) 课程 程序员入门必备教程—HTTP协议详解)

  • HTTP分层请求
  • HTTP协议
  • HTTP请求过程
  • TCP协议
  • HTTPS协议

Http分层:

网络需要完成的任务:防止数据丢包,避免数据重复,数据完整性校验,数字转模拟信号,…,信号衰减

为了完成不同层面的各个任务,简化网络的复杂度,网络通信被分解为多层次结构,每一层都紧挨着上层或下层进行交互,这样在修改甚至替换某一层的软件时,只需要层与层之间的接口保持不变,就不会影响其他层。

  • OSI七层网络模型
  • TCP/IP协议簇

image-20220819105355252

HTTP协议:

超文本传输协议(HyperText Transfer Protocol , HTTP)

一种无状态,以请求、应答方式运行的协议。它使用可扩展语义和子描述消息格式,与基于网络的草文本消息系统可以灵活互动

HTTP报文格式:

HTTP协议的请求报文和响应报文的结构基本相同,由三大部分组成:

  • 起始行(start line):描述请求或响应的基本信息
  • 头部字段集合(header):使用key-value形式更详细的说明报文
  • 空行
  • 消息正文(entity):实际传输的数据,不一定是文本,可以是图片,视频等二进制数据
请求行报文格式:

image-20220819110831735

  • 请求方法(METHOD):如 GET / HEAD / PUT / POST,表示对资源的操作
  • 请求目标 :通常是一个URL,标记了请求方法要操作的资源
  • 版本号:表示报文使用的HTTP协议版本
响应行报文格式:

image-20220819110855815

  • 版本号 :表示报文使用的HTTP协议版本
  • 状态码(STATUS CODE): 一个三位数,用代码的形式表示处理结果,比如200是成功,403是客户端访问被拒,500是服务器错误
  • 原因(READON):作为数字状态码补充,是更加详细的解释文字,协助理解原因
HTTP头字段:

头部字段是key-value形式,key和value间使用 “ :”做分隔,比如前后端分离时常遇到的要与后端协商传输数据类型 “ Content-type:application/json ” ,最后用CRLF换行表示字段结束,HTTP头字段的使用比较灵活,不仅可以用Host,Connection等已有头字段,也可以任意添加自定义头,这就给HTTP协议带来了无限扩展可能。

注意事项

  • 字段名称不区分大小写,但不允许出现空格和下划线“_”,可以使用连字符“-”,字段后必须紧跟“:”,中间不许有空格,但“:”后允许多个空格
  • 字段顺序没有意义,任意排列不影响语序
  • 字段原则上不允许重复,除非字段本身允许:Set-Cookie
常用头字段:

HTTP协议有很多头字段,基本可以分为四大类:

  • 请求字段:请求头中的头字段:如Host,Referer
  • 响应字段:响应头中的头字段:如Server,Date
  • 通用字段:在响应头和请求头都可以出现的:Content-type,Connection

HTTP请求过程:

当用户在浏览器中输入网址后,网络协议都做了哪些工作?

  1. 首先依据浏览器应用程序,解析出URL中的域名
  2. 依据域名获得的ip地址,首先从浏览器缓存中查看,没有就去本机域名解析文件hosts中查看,LDNS,Rootserver,国际定级域名服务商层层解析,直至找到
  3. 拿到ip地址后,浏览器发起对服务器的三次握手
  4. 握手建立连接后,开始组装http请求,发送报文
  5. 服务器收到请求报文后,开始请求报文解析,生成响应数据,发送响应数据
  6. 浏览器收到响应后,开始渲染页面

chrome://net-internals/#events 查看浏览器缓存ip地址

image-20220819120503128

TCP协议:

TCP协议是面向连接的,可靠的,基于字节流的传输层协议

TCP属性:

  • 基于连接:数据传输之间需要建立连接
  • 全双工:双向传输
  • 字节流:不限制数据大小,打包成为报文段,保证有序接收,重复报文自动丢弃
  • 可靠的传输服务:保证可达,丢包时通过重发机制实现可靠性
  • 拥塞控制:防止网络出现恶性拥塞

TCP报文:

image-20220821101526541

Source port:源端口 Dest port:目的端口

Seq:请求数 ACK:应答数

Header length:首部长度 Unused:保留字段

Receive window:当前可接收值 Urgent data:紧急报文指针

Options:可选参数 Data:数据

TCP连接管理:

TCP连接:四元组【源地址,源端口,目的地址,目的端口】

确认连接:三次握手

​ a.同步通信双方的初始序列号(ISN)

​ b.协商TCP通信参数(MSS,窗口信息,指定校验和算法)

image-20220821102017022

内核操作:

image-20220821102108877

关闭连接:四次挥手

image-20220821102157493

字节流协议:

MSS:Max Segment Size:默认536byte实际数据

TCP会依据Seq报文序列号进行排序,使得文件被划分为小信息发送时不会乱序

可靠性/重传机制:

1.ack丢失:

image-20220821102424659

2.请求报文丢失

image-20220821102536666

3.滑动窗口协议:

image-20220821102644054

每次发送一组报文,并确定最后的报文是否收到回信,如果收到,表示报文全部被接收,直接跳至下一组,不必有重复

如果没有收到最后的报文,则往前推,直至从收到回信的部分(如图,3,5没有回信只收到12的回信,则12确认发送成功,不论4是否成功,3,4,5都和后面数据一起发送)

HTTPS协议:

HTTP具有”明文“特点,整个传输过程完全透明,任何人都可以在链路中截获、修改和伪造,数据具有不可信性

使用HTTPS,所有HTTP请求都会在请求和响应之前进行加密

image-20220821103501204

SSL/TSL:

SSL即安全套接层,由网景公司于1994年发明,IETF在1999年将其改名为TLS传输层安全,三个主流版本为2006的1.1,2008的1.2,2018的1.3,每个版本都紧跟密码学的发展和互联网现状,持续强化安全和性能,已经成为信息安全领域的权威标准

摘要算法:

将任意长度的数据”压缩“为固定长度,且独一无二的”摘要“字符,可以将其与明文一起发送,接收端解压字符后可以对比查看明文是否被篡改

如:md5

加密算法:

对称加密算法:

编码使用相同的密钥进行加密解密(AES,RC4,ChaCha20)

非对称加密算法:

有两个密钥,一个”公钥“,一个”私钥“。前者可以给任何人使用,随意分发。后者需要保密,网站秘密保存

image-20220821104242155

数字证书