目录
HTTP缓存机制
HTTPS的SSL和TSL
HTTPS的加密算法
HTTP协议
HTTP的request和response
HTTP1.0和1.1
HTTP中get和post区别
HTTP的幂等性
cookie和session的区别
URI和URL
DNS
TCP/IP五层协议
OSI七层协议
HTTP缓存机制
HTTPS的SSL和TLS
SSL是一种安全传输协议,TLS是SSL的升级版
HTTPS是把HTTP和TLS一起使用,TSL位于HTTP和TCP之间,实际上是把TLS握手+TLS加密+TLS告警+TLS Record Layer+HTTP,组成HTTPS:
HTTPS的问题:
- 通信慢
- 必须加密
数字证书
数字证书CA是为了保证公钥是来自于真实服务器,通过权威机构,给网站颁发一个认可凭证,有凭证就被浏览器信任。
用户把私钥和公钥发给认证机构,机构返回确认信息和数字证书,内含身份信息和公钥。
TLS/SSL四次握手
1.客户端发起
支持的协议版本和加密压缩算法
随机数1
2.服务器回应
确定加密版本和算法
随机数2
下发数字证书(CA保证公钥不被篡改)
3.客户端回应
验证数字证书
随机数3,用数字证书的公钥加密
凑齐3个随机数,用商定的方式生成对话密钥
通知编码改变,握手结束(编码改变就是以后改用商定的加密方式来通信)
4.服务端处理
解密和验证,得到随机数3
凑齐3个随机数,用商定的方式生成对话密钥(和客户端生成的一致)
收到编码改变,握手结束
完成握手后,用握手过程中的3个随机数叠加(3个伪随机就很接近随机数了),生成一个用于加密通信内容的对称密钥,公钥是用来给对称密钥加密的,这样可以兼顾效率与安全。
SSL/TLS协议运行机制的概述
HTTPS的加密算法
HTTP协议
HTTP就是超文本传输协议,就是为了从Web服务器向浏览器传输HTML超文本的。
HTTP的特点
1.简单快速
协议简单,服务器程序规模小,通信速度快
2.无连接
每次连接只处理一个请求,服务器收到客户端应答后关闭连接,节省传输时间
3.无状态
不记录上下文,没有记忆,可以提高服务器应答速度
RESTful和SOA两种使用方法
HTTP本身是一种面向资源的应用层协议,实际使用时有两种方式:
1.RESTful,把HTTP当成应用层协议,遵守HTTP协议的各种规定。
2.SOA,把HTTP当成传输层协议,然后在HTTP之上建立自己的应用层协议。
HTTP的requset和response
浏览器发出request,服务器返回response,具体体现在HTTP的消息头
- request消息头
访问信息
GET HTTP/1.1 访问方法(GET)和协议
Host www.baidu.com:80 主机和端口号
Referer 从哪个网址跳转过来的
User-Agent 客户端使用的操作系统和浏览器等
支持信息
Accept / 浏览器接收的媒体类型
Accept-Encoding gzip 浏览器支持的编码方法
Accept-Language 语言zh和字符集gbk
缓存信息
If-Modified-Since 浏览器中缓存的最后修改时间
If-None-Match 和E-Tag成对使用,是否可以直接使用本地缓存文件 - response消息头
连接信息
HTTP/1.1 304 协议,304表示可以允许使用缓存
Server 服务器软件
Date response的生成时间
Proxy-Connection 例如Keep-alive,表示TCP连接不会关闭,下次继续使用
缓存信息
Last-Modified 资源最后修改时间,和If-Modified-Since对应
E-Tag 和If-None-Match对应
Expires 告诉浏览器,本地缓存过期时间
Cache-Control 例如max-age-43200 表示request和response需要遵循的缓存机制
http1.0和http1.1
背景
把html文档从web服务器取到浏览器
优化角度
浏览器阻塞:对一个域名,浏览器同时只有4个连接
DNS解析:要先把域名解析为IP
握手:TCP的连接3次握手和断开4次挥手
区别
- 缓存机制更丰富
1.0只有If-Modified-Since - 有range,优化带宽和网络连接
1.1有range属性,可以请求资源的一部分,可以断点续传 - Host头加主机名
1.0没有主机名,1.1有主机名,所以可以支持一个IP上多个虚拟主机,如果没有主机名,会报400 - TCP长连接
1.0每个HTTP都有关闭和重新建立TCP连接
1.1支持一个TCP连接上处理多个HTTP请求,默认Keep-alive
问题
- 1.0不能长连接,每次关闭创建连接,导致速度慢
- 1.1长连接可能,不必要的连接会导致服务器压力大
- 1.1header内容过大且变化很小,传输压力大
- 明文传输,不安全
HTTP中get和post的区别
- get数据在url?后;post在body中
- get的数据大小受浏览器限制
- 请求变量的值
分别是Requset.QueryString Request.Form - get不安全
数据直接显示在url中,页面被缓存后也容易被读走
HTTP协议的幂等性
幂等性
幂等性是数学中的一个概念,表达的是N次变换与1次变换的结果相同
幂等并不属于某个协议,它是一种特性,不管是SOA还是RESTful的Web API都要考虑幂等性。
HTTP协议的幂等性
HTTP有GET、DELETE、PUT、POST四种主要方法,它们的幂等性如下:
- HTTP GET方法,幂等
用于获取资源,无副作用,所以天然是幂等的。 - HTTP DELETE方法,幂等
用于删除资源,有副作用,但它是满足幂等性的,例如DELETE http://www.yourbiz.com/id/123,不管调用几次,对系统的作用是相同的,都是删掉id为123的数据,不会引发错误。 - HTTP POST方法,不是幂等
POST所对应的URI并非创建的资源本身,而是资源的接收者,两次相同的POST请求会在服务器端创建两份资源,它们具有不同的URI,所以POST不具有幂等性。 - HTTP PUT方法,幂等
PUT所对应的URI是要创建或更新的资源本身,例如DELETE http://www.yourbiz.com/id/123,总是操作id为123的数据,无则创建,有则更新,对同一URI,多次PUT和一次PUT的结果是相同的,所以也是幂等的。
理解HTTP幂等性
cookie和session的区别
都是弥补HTTP无状态的不足
- cookie是在客户端保存的文本信息
客户端支持cookie
服务器返回时,在header中附加cookie(Set-cookie)
客户端请求时,在header中添加cookie(cookie) - session是在服务端保存的数据
session是客户端和服务端的一系列交互动作
服务器生成sessionId
服务器为session增加内容
客户端请求时,带上sessionId,服务端根据sessionId获取session信息 - 区别
cookie存本地,不安全但是高效,有效期很长,文本信息(ASCII编码)
session存服务器,安全但是存储压力大,有效期短(业务中修改sessionId,就失效),任何数据类型
URI和URL
- URI是用来标识资源的,统一资源标识符,uniform resource identifier,强调资源
file://a:8090/f/b/a.txt包括三部分:
资源的命名机制
资源所在的主机名
资源的名称,虽然用路径标识,但是重在资源 - URL是用来定位资源的,统一资源定位符,uniform resource locator,强调路径
URL是一种具体的URI,URL不仅标识一个资源的URI,还指明了如何定位到这个资源
http://192.168.1.2:80/web/index.html包括三部分:
访问资源的协议
所在的主机IP和端口
资源的具体地址
DNS
DNS就是把域名解析为IP地址,主要分四步:
- 本机查找
先查看Host文件,获取域名映射的IP地址
如果Host文件没有,会查找本地DNS缓存
如果Host和缓存都没有,去找本地DNS服务器 - 本地DNS服务器
根据TCP/IP参数中的首选DNS服务器地址,去请求本地DNS服务器
如果本地DNS服务器有数据,返回IP;
如果域名不在本地DNS服务器的区域内负责解析,但是有DNS缓存数据,就返回缓存的DNS,但是这不是权威数据; - 上层DNS服务器
如果本地DNS服务器允许转发模式,就迭代地向上层DNS服务器查找 - 根服务器
如果本地DNS不允许转发,或者转发后上层DNS服务器最终也没有找到,就会进去全球13个根服务器中,根据域名如.com,获取一个顶级域名服务器的地址,去顶级域名服务器查找对应的IP地址。
DNS解析有两种方式:
递归:就是全交给DNS服务器,多个DNS服务器逐级查询和反馈
迭代:就是客户机自己来,逐个查询多个DNS服务器
TCP/IP五层协议
自底向上:
- 物理层/实体层
在物理通信媒介的基础上,用电流实现0/1传输,传输bit数据 - 链接层
在网卡之间,传输数据帧
协议,bit数据组成数据包(帧),包括Head(收/发方地址,数据类型)和Data
mac,从网卡到网卡(交换机核心就是找mac,转发数据包)
广播,在网内广播,所有网卡都会收到包,在head中检查是否要处理 - 网络层
建立主机到主机的通信,实现基本的数据封包传递,使数据包能到达目标
用广播找网卡是不现实的,所以要抽象出网络地址,用于跨层通信,先处理网络地址,找到mac所在的子网络,再处理mac地址。
用IP协议规定网络地址,在复杂网络结构中,通过路由查询可以找到目标IP地址。
IP数据包也是包括Head(IP),Data
arp协议,发出一个数据包,所在子网络的每台主机都收到,对比IP是否一致并处理,类似链接层的广播 - 传输层
建立端口到端口的通信,然后通过网络层传递并确认数据包,端口是用来区分通信的是主机内的哪个应用程序
数据包也是包括Head(端口),Data - 应用层
应用程序规定数据格式,是软件可以直接使用的网络服务,如电子邮件SMTP、文件FTP、远程访问Telnet等
最终,数据包的格式为:
链路层Head(MAC) + 网络层Head(IP) + 传输层Head(TCP端口号) + 数据包Data
OSI七层协议
自底向上:
- 物理层
提供bit流服务,以二进制形式在物理媒介上传输数据。
定义物理接头类型、电压等、用电流强弱代表0/1,实现bit概念,实现bit字节传输
仅能实现传输,数据并没有组织起来。 - 数据链路层
提供可靠的帧数据传输。帧是有地址的,传输时可以检错。
使用机器地址,利用不可靠物理层,建立可靠的传输,主要依靠帧的无差错传输
对帧进行解码和传递,实现寻找物理地址,帧数据的检错重发等,要使用交换机 - 网络层
提供网络地址,并建立和提供通信双方使用的路由,让数据包可以到达目标(不检错)。
使用网络地址,利用数据链路层,建立数据传输的最佳路径。
把网络地址翻译为物理地址(交给数据链路层的是物理地址),然后综合考虑可选路由、网络拥堵、优先权等,特别是在多层网络结构中,为通信的两个网络节点找到一个最佳路径
其中,网络地址就有IP协议、AppleTalk协议等,网络地址的分配、管理和翻译是交给路由器来处理的 - 传输层
利用网络路由,提供端到端的接口,提供传输控制服务
定义了数据传输协议和端口号,TCP协议、UDP协议
把大数据包切成小数据段,实现数据的发送和重组,并控制传输速度 - 会话层
建立和解除联接,维护数据传输通道。
在网络节点之间,建立通信链路并同步数据,实际上是利用传输层的端口号,实现会话的建立、维持、中断、恢复、终止。 - 表示层
把数据表示为网络中使用的数据格式(不同网络可能不一样),格式化、加密解密、格式转换等。
实际上可以把不同格式翻译成统一的格式
需要对应用层的数据进行加密解密,对图片和文件做编码解码 - 应用层
为软件提供网络服务,文件传输、电子邮件等
应用层本身不是某种服务,而是为使用网络的软件提供电子邮件收发、文件传输管理等服务