Http分析
本片笔记适用于 图灵诸葛官方号) 课程 程序员入门必备教程—HTTP协议详解)
- HTTP分层请求
- HTTP协议
- HTTP请求过程
- TCP协议
- HTTPS协议
Http分层:
网络需要完成的任务:防止数据丢包,避免数据重复,数据完整性校验,数字转模拟信号,…,信号衰减
为了完成不同层面的各个任务,简化网络的复杂度,网络通信被分解为多层次结构,每一层都紧挨着上层或下层进行交互,这样在修改甚至替换某一层的软件时,只需要层与层之间的接口保持不变,就不会影响其他层。
- OSI七层网络模型
- TCP/IP协议簇
HTTP协议:
超文本传输协议(HyperText Transfer Protocol , HTTP)
一种无状态,以请求、应答方式运行的协议。它使用可扩展语义和子描述消息格式,与基于网络的草文本消息系统可以灵活互动
HTTP报文格式:
HTTP协议的请求报文和响应报文的结构基本相同,由三大部分组成:
- 起始行(start line):描述请求或响应的基本信息
- 头部字段集合(header):使用key-value形式更详细的说明报文
- 空行
- 消息正文(entity):实际传输的数据,不一定是文本,可以是图片,视频等二进制数据
请求行报文格式:
- 请求方法(METHOD):如 GET / HEAD / PUT / POST,表示对资源的操作
- 请求目标 :通常是一个URL,标记了请求方法要操作的资源
- 版本号:表示报文使用的HTTP协议版本
响应行报文格式:
- 版本号 :表示报文使用的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请求过程:
当用户在浏览器中输入网址后,网络协议都做了哪些工作?
- 首先依据浏览器应用程序,解析出URL中的域名
- 依据域名获得的ip地址,首先从浏览器缓存中查看,没有就去本机域名解析文件hosts中查看,LDNS,Rootserver,国际定级域名服务商层层解析,直至找到
- 拿到ip地址后,浏览器发起对服务器的三次握手
- 握手建立连接后,开始组装http请求,发送报文
- 服务器收到请求报文后,开始请求报文解析,生成响应数据,发送响应数据
- 浏览器收到响应后,开始渲染页面
chrome://net-internals/#events 查看浏览器缓存ip地址
TCP协议:
TCP协议是面向连接的,可靠的,基于字节流的传输层协议
TCP属性:
- 基于连接:数据传输之间需要建立连接
- 全双工:双向传输
- 字节流:不限制数据大小,打包成为报文段,保证有序接收,重复报文自动丢弃
- 可靠的传输服务:保证可达,丢包时通过重发机制实现可靠性
- 拥塞控制:防止网络出现恶性拥塞
TCP报文:
Source port:源端口 Dest port:目的端口
Seq:请求数 ACK:应答数
Header length:首部长度 Unused:保留字段
Receive window:当前可接收值 Urgent data:紧急报文指针
Options:可选参数 Data:数据
TCP连接管理:
TCP连接:四元组【源地址,源端口,目的地址,目的端口】
确认连接:三次握手
a.同步通信双方的初始序列号(ISN)
b.协商TCP通信参数(MSS,窗口信息,指定校验和算法)
内核操作:
关闭连接:四次挥手
字节流协议:
MSS:Max Segment Size:默认536byte实际数据
TCP会依据Seq报文序列号进行排序,使得文件被划分为小信息发送时不会乱序
可靠性/重传机制:
1.ack丢失:
2.请求报文丢失
3.滑动窗口协议:
每次发送一组报文,并确定最后的报文是否收到回信,如果收到,表示报文全部被接收,直接跳至下一组,不必有重复
如果没有收到最后的报文,则往前推,直至从收到回信的部分(如图,3,5没有回信只收到12的回信,则12确认发送成功,不论4是否成功,3,4,5都和后面数据一起发送)
HTTPS协议:
HTTP具有”明文“特点,整个传输过程完全透明,任何人都可以在链路中截获、修改和伪造,数据具有不可信性
使用HTTPS,所有HTTP请求都会在请求和响应之前进行加密
SSL/TSL:
SSL即安全套接层,由网景公司于1994年发明,IETF在1999年将其改名为TLS传输层安全,三个主流版本为2006的1.1,2008的1.2,2018的1.3,每个版本都紧跟密码学的发展和互联网现状,持续强化安全和性能,已经成为信息安全领域的权威标准
摘要算法:
将任意长度的数据”压缩“为固定长度,且独一无二的”摘要“字符,可以将其与明文一起发送,接收端解压字符后可以对比查看明文是否被篡改
如:md5
加密算法:
对称加密算法:
编码使用相同的密钥进行加密解密(AES,RC4,ChaCha20)
非对称加密算法:
有两个密钥,一个”公钥“,一个”私钥“。前者可以给任何人使用,随意分发。后者需要保密,网站秘密保存