1. 应用层
应用层
HTTP/HTTPS协议
超文本传输协议:
HTTP常见的状态码:
- 1xx:提示。
- 2xx:成功。
- 3xx:重定向。
- 4xx:客服端错误。
- 5xx:服务器错误。
GET和POST有什么区别:
GET的语义是从服务器获取指定资源。POST是根据请求负荷(报文body)对指定资源做出处理。GET和POST方法主要区别是什么。关键在于安全和幂等。
GET:是安全并且幂等的。
POST:不是安全也不是幂等的。
HTTP缓存技术
缓存实现主要分为强制缓存和协商缓存。
强缓存:只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边。像状态码中要是标明from disk cache。那就是直接使用强制缓存。强缓存利用HTTP响应头部两个字段实现,分别是Cache-Control(相对时间)、Expires(绝对时间)。如果两个字段都存在,那么Cache-Control优先级要比Expires高。由于Cache-control选项更多,所以用Cache-control实现强缓存更好。具体实现是浏览器第一次请求服务器资源时,服务器在返回时会在Response头部加上Cache-control并且设置过期时间大小。当浏览器再次请求时,会先通过请求资源时与Cache-control中设置的过期时间大小,来计算是否过期。没有过期直接使用,如果过期就重新请求。
协商缓存:当响应码是304,这个是告诉浏览器可以使用本地缓存的资源,像这种通过浏览器告诉客户端是否可以使用存储的方式成为协商缓存。
HTTP1.0和HTTP1.1区别:
HTTP1.0规定浏览器和服务器保持短连接,浏览器每次请求都需要与服务器建立一次TCP连接。HTTP1.0还规定下一个请求必须在前一个请求响应到达之前才能发送。前一个请求的响应一直不到达,那么下一个请求就不发送。后面的请求都被阻塞了,所以HTTP1.0存在请求的队友阻塞。
HTTP1.1解决了1.0版本存在的问题,HTTP1.1可以保持长连接,避免每次请求都要重复建立TCP连接,还支持多个请求同时发送,但服务器还是按照顺序先回应前面的请求,再回复后面的请求。如果前面回复特别慢,后面就会有很多请求排队等着处理。所以HTTP1.1还是存在响应的对头阻塞时间。并且存在断点续传。
HTTP2.0版本区别:
HTTP2.0会压缩头部,如果同时有多个请求头部一样或相似,那么协议会消除重复部分。并且请求和响应消息编码为二进制,不再使用之前的村文本消息,增加了数据传输的效率。HTTP2.0可以在一个TCP连接中并发多个请求和回应,而不用向按照顺序一一对应,从而解决HTTP对头阻塞问题。并且在一定改善传统的请求应答工作模式,服务器可以主动向客户端主动发送信息。HTTP2.0虽然可以通过请求复用一个TCP连接解决HTTP队头阻塞,但是一旦发生丢包;就会阻塞所有的HTTP请求,这就是TCP层队头阻塞。为了解决这个问题,HTTP3.0直接放弃使用TCP,将传输层协议改成UDP,但是因为UDP不可靠传输,所有就需要QUIC实现可靠机制。
HTTPS加密机制、SSL/TLS握手过程
HTTP是通信是通过明文传输,可靠性较差。然后HTTP是就是在HTTP基础上加入加密以及认证机制。在HTTP通信接口部分使用SSL(安全套接字层)和TLS(传输层安全)协议实现。使得HTTP先和SSL通信,然后SSL和TCP通信,而不是让HTTP直接和TCP通信。这里明白两个概念,对称加密(加/解密的密钥一样)和非对称加密(有一对密钥,分别是公钥和私钥,一般是公钥加密,私钥解密)。
HTTPS的加密过程如下:
- 客服端向服务器发送HTTPS请求。
- 服务器将公钥证书发送给客户端。
- 客服端验证服务器证书。
- 如果验证通过,那么生成一个用于会话的对称密钥。
- 客户端使用服务器的公钥对对称密钥加密,并将加密后的密钥发送给服务器。
- 服务器使用私钥解密对称密钥。
- 服务器和客服端使用对称密钥进行通信。
为什么使用非对称密钥加密对称密钥,通信内容真正加密的是对称密钥:
- 这是因为使用非对称加密算法,常见的比如RSA加密算法。使用这种算法处理大量数据效率很低,所有使用对称密钥处理。并且使用非对称密钥对对称密钥进行加密也保证了通信密钥的安全性。所以在安全性中真正需要保证机密的的密钥。
DNS域名解析 :
是将人们方便记忆的域名转换为计算机可以理解的IP地址。常见的流程是:
- 浏览器查看自己缓存是否存在该域名对应的IP地址,存在则直接访问。
- 如果浏览器没有,那么操作系统会检查自己的缓存。
- 如果操作系统也没有,那么会向NDS服务器发送查询请求。
- 本地DNS服务器会检查自己缓存,存在该域名对应IP地址则直接返回给用户,如果没有那么会向根域名服务器发送查询请求。
- 如果根也没有,那么会向顶级域名服务器发送请求,如果还是没有,那么会向取权限服务器发送。
递归解析与迭代解析:
- 区别在于是谁负责发送请求查询,递归解析请求方向是本地DNS->顶级域名服务器->根域名服务器->权限域名服务器。然后回复是相反的。但是迭代服务器每一次的请求发起都是本地,回复有可能是本地DNS服务器,顶级域名服务器等等,具体是那个取决于到了那一步查询到该域名对应的IP地址。
正向解析和方向解析:
- 正向解析:域名转换为IP地址。
- 方向解析:IP地址转换为域名地址。