高频面试题中的HTTP(四)
TCP的三次握手
- 客户端发送连接请求报文段
- 服务器收到客户端的连接请求后,如果同意建立连接,则会发送一个响应报文
- 客户端收到服务器的响应后,对其进行确认,服务器收到这个确认后,就完成了三次握手,双方可以开始进行数据传输了。
以boss投简历为例,第一步,向hr打招呼,第二步,hr收到消息并且有意向,就会回应,第三步,收到hr的消息之后去发送简历;
TCP四次挥手
客户端向服务器发送连接释放请求(FIN)报文段。客户端希望关闭连接,并停止发送数据。客户端进入
FIN_WAIT_1
状态。服务器收到连接释放请求后,发送确认(ACK)报文段作为响应,确认收到了客户端的关闭请求。服务器进入
CLOSE_WAIT
状态,客户端进入FIN_WAIT_2
状态。服务器完成自己未发送的数据的发送后,发送连接释放请求(FIN)报文段给客户端,表示服务器也希望关闭连接。服务器进入
LAST_ACK
状态。客户端收到服务器的连接释放请求后,发送确认(ACK)报文段作为响应,确认收到了服务器的关闭请求。客户端进入
TIME_WAIT
状态。此时,服务器等待最后一个ACK的确认。在经过一段时间(通常是两倍的报文段最大生存时间,即2MSL)后,客户端关闭连接,结束
TIME_WAIT
状态。最后一个ACK被发送到服务器。
在四次挥手完成后,TCP连接正式关闭,客户端和服务器都进入了CLOSED状态。
需要注意的是,这里的挥手过程中,每个报文段都需要对方进行确认。同时,客户端和服务器都需要维护一些状态来跟踪连接的关闭过程,以保证可靠的连接释放。
HTTP和HTTPS的区别
安全性:
HTTP
是明文传输协议,数据在传输过程中不经过加密处理,容易被窃听和篡改。HTTPS
则通过使用SSL/TLS
协议对数据进行加密,确保传输过程中的安全性。默认端口:
HTTP
默认使用端口80进行通信。HTTPS
默认使用端口443进行通信。证书要求:
HTTP
不需要使用证书。HTTPS
使用SSL
(Secure Sockets Layer)或TLS
(Transport Layer Security)证书来验证服务器的身份,并建立安全连接。
HTTPS加密过程或执行过程
① 证书验证阶段 浏览器发起HTTPS
请求 服务端返回HTTPS
证书 客户端验证证书是否合法,如果不合法则提示告警
② 数据传输阶段 当证书验证合法后,在本地生成随机数 通过公钥加密随机数,并把加密后的随机数传输到服务端 服务端通过私钥对随机数进行解密 服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输
HTTPS中的SSL证书做了什么
身份验证: SSL
证书由可信任的数字证书颁发机构(CA)签发,用于验证服务器的身份。证书中包含了服务器的公钥以及与之相关的信息,确保客户端连接到的是预期的服务器而非恶意伪造的服务器。
数据加密: SSL
证书中的公钥用于对数据进行加密,并且只有服务器拥有与该证书关联的私钥才能解密数据。这样,即使在传输过程中数据被截获,也无法被解密读取。
数据完整性: 在SSL
握手过程中,服务器会生成一个消息摘要,并使用私钥对其进行签名。客户端收到数据后可以使用证书中的公钥来验证签名的有效性,确保数据在传输过程中没有被篡改。
安全连接建立: 通过SSL
证书,客户端和服务器可以协商出一种加密算法和密钥,用于在之后的通信过程中进行加密和解密,确保传输的数据保持机密性和完整性。
总结起来,HTTPS
使用SSL
证书实现了数据加密、身份验证和数据完整性保护,从而提供了更高的安全性,适用于需要保护敏感信息(如个人信息、密码等)的网站和应用程序。
前端攻击
XSS攻击
说明:在网页中注入JavaScript代码,从而在受害者的浏览器上执行恶意操作 解决:过滤用户输入输出及浏览器参数,避免将用户输入内容直接作为html输出到页面
CSRF攻击
说明:攻击者可以通过伪造请求,发送恶意请求到受信任的网站,欺骗用户进行非预期的操作 解决:使用验证码来增加人为干预,并校验当前运行环境的域名信息
数据窃取
说明:攻击者通过窃取浏览器的Cookie信息或利用恶意广告注入恶意脚本来窃取网页中的敏感数据 解决:使用https协议,并对传输的敏感参数加密
中间人攻击
说明:攻击者会在通信过程中插入自己作为中间人的位置,使其能够拦截、篡改或窃取通信数据 解决:使用vpn,生物认证
上传文件攻击
说明:文件名攻击,上传的文件采用上传之前的文件名,可能造成:客户端和服务端字符码不兼容,导致文件名乱码问题;文件名包含脚本,从而造成攻击。 解决:对上传文件名转义或者生成新文件名,隐藏文件真实路径,限制文件大小
如果第二次握手失败会怎么样
可能发生以下几种情况:
- 超时:客户端 A 在规定时间内没有收到服务器端 B 的 SYN/ACK 报文段,即超过了连接建立的超时时间。这可能是由于网络延迟、丢包或者服务器端未正常响应等问题导致的。
- 拒绝:服务器端 B 可能选择拒绝连接请求,例如,基于某些安全策略、负载均衡机制或者连接数限制等原因。
- 重传:客户端 A 可能会尝试重新发送第一次握手的连接请求,以期望能够重新建立连接。
七层网络模型
- 物理层:负责传输比特流,对应物理介质和网络设备(如网线、集线器)。
- 数据链路层:负责可靠地传输数据帧,对应网桥、交换机等设备。
- 网络层:负责确定数据的路径和地址,对应路由器、防火墙等设备。
- 传输层:负责提供端到端的可靠数据传输,对应传输控制协议(TCP)和用户数据报协议(UDP)等协议。
- 会话层:负责建立、管理和终止会话连接。
- 表示层:负责数据格式转换、数据加密等操作。
- 应用层:提供各种应用服务,例如HTTP、FTP、DNS等。