基础
# HTTP介绍
首先,HTTP中文全称是叫做超文本传输协议,它的核心是一个请求/响应模型,简单来说它主要分为三层结构,超文本 ,传输,协议。
- 超文本:是一种文本格式,它的格式是一个统一的格式,可以用来表示文本,图片,音频,视频等。
- 传输:传输就是将数据通过一些物理介质,将一个端的信息传输到另一个端。
- 协议:协议简单来说就是一种规则,它约束了数据的格式,同时它也要求在进行通信是遵循一些网络规则协议。
# 网络模型
网络模型主要分为两种,一种是TCP/IP协议模型,一种是OSI的模型。
# TCP/IP的网络模型
首先来介绍一下TCP/IP的网络模型,一般可以将它分为三层,应用层,运输层,网络层,链路层,物理层;其中链路层和物理层可以统称为数据链路层。TCP,UDP发生在这个链路层上,HTTP发生在应用层上,TCP和UDP就是负责应用层产生的数据,在记忆这五层模型的顺序时可以简单理解为用户请求了接口,通过运输层将用户的请求以及服务器的数据进行一个交互,通过网络层来将数据传输到目的地,最后通过链路层以及物理层来将用户想要的数据显示到设备上。
# OSI七层模型
OSI网络模型是在TCP/IP的五层模型上另外加了一个表现层和会话层,我个人理解为用来展示网络数据以及会话数据的层。
# HTTP各版本介绍
# HTTP/1.0
HTTP/1.0只提供了最基本的认证,用户的用户名和密码是没有经过加密的,容易泄密,同时他被设计用来使用短链接,每次发送数据都会经过TCP的三次握手和四次挥手,效率比较低;它不支持断点续传,所以每次都必须传送所有的页面和数据,HTTP/1.0认为每个计算机都只有一个IP,所以它在请求消息的URL中包含传递的主机名。
# HTTP/1.1
HTTP/1.1使用了摘要算法来进行身份的验证,同时HTTP/1.1默认使用的是长链接,只需要建立一次连接就可以传送多次数据,在传输完成后,只需要切断一次连接即可,长链接的连接时长可以通过请求头中的keep-alive来进行设置,HTTP/1.1同时还支持断点续传,它通过使用请求头中的Range来进行实现,HTTP/1.1使用了虚拟网络,在一台物理服务器上可以运行多个虚拟主机,它们共享一个IP地址。
# HTTP/2.0
HTTP/2.0对头部使用了HPACK算法进行了压缩;同时它使用二进制的格式,更加接近TCP/IP,提升了解析的效率;HTTP/2.0强化了安全,一般都跑在HTTPS上;它同时还使用了多路复用,通过携带不同的id来在一个连接上发送多个请求。
# TCP和UDP的介绍
TCP全称是传输控制协议,它通过三次握手来建立连接,通过四次挥手来断开连接。
# TCP三次握手
TCP三次握手是一个建立连接的过程,它的三个步骤是: 1.首先客户端发送一个SYN(初始化建立连接的消息)到服务端 2.服务端接收到了后返回一个SYN/ACK(确认建立连接的消息,本地的SYN消息以及较早的ACK) 3.客户端在接收到了服务端的回复后,发送一个ACK(帮助对方确认收到的SYN消息),接下来客户端就可以向服务端发送数据了
# TCP四次挥手
TCP四次挥手是一个断开连接的过程,它的三个步骤是: 1.客户端发送一个FIN(结束连接的消息)到服务端,并且它会进入一个叫FIN-WAIT-1的等待状态 2.服务端接收到了客户端的FIN消息后,返回一个ACK(确认收到的FIN消息),客户端接收到了ACK后,它会进入等待的第二个状态FIN-WAIT-2,这时候服务端还需要接收未接收完的数据,当服务端接收完数据后,确认可以断开连接了,会给客户端发送一个FIN消息 3.客户端等待一段时间后接收到了服务端的FIN消息,这时候它就进入了一个TIME_WAIT状态,这时候会发送一个ACK消息给服务端,提醒服务器接收到数据了,防止数据丢失,服务器会在收到ACK消息后断开连接,客户端在等待一段时间后也会断开连接
# TCP和UDP的区别
-TCP是面向连接的协议,UDP是无连接的协议 -TCP需要先建立连接,而UDP不需要 -TCP按照特定顺序重新排列数据包,UDP每一个数据包都是独立的 -TCP是延迟传输速度较慢,UDP是无延迟传输,速度更快 -TCP是重量级的,它每次发送数据之前,都需要通过TCP三次握手,UDP是轻量级的,没有跟踪连接和消息排序 -TCP会进行错误的校验,并且进行错误恢复,UDP也会错误检查,不过会把错误的数据包丢弃 -TCP是可靠的,UDP是不可靠的
# HTTP无状态协议解决方法
无状态协议是指浏览器对于事物的处理没有记忆能力,如果没有Cookie机制,用户登录账户后关闭浏览器再打开它,它是不会记住用户的账号的,它能够让浏览器拥有记忆能力。
# Cookie机制
Cookie是一种存储在客户端的数据,它可以让浏览器记住用户的登录状态,这样就可以让用户不用每次都要登录。当我们向服务器发送一个请求的时候,服务器会发送一个认证信息,我们第一次发送请求时,服务器会开辟一个Session空间,同时会生成一个SessionId,并且通过响应头的Set-Cookie字段返回给浏览器,浏览器接收到响应头后,会把SessionId存储在客户端,下次发送请求时,服务器会把SessionId发送给服务器,服务器会把SessionId和Session空间关联起来,这样就可以让服务器记住用户的登录状态。
# JWT机制
JWT是一种基于JSON Web Token的协议,它可以用来保证数据的安全性,并且可以用来验证数据的合法性。和Cookie不同,它保存在客户端的信息上,JWT在本地验证完毕后,这个token就会在Session中随请求一起发送到服务器,token可以进行多次验证,节省了服务器资源。
# HTTPS
HTTPS是在HTTP的TCP三次握手之后,通过SSL/TSL握手来加密数据,使得数据传输更加安全。
# 地址栏访问URL
这个问题涉及到电脑的缓存,当我们输入一个url地址以后,浏览器会先在本地的DNS缓存中寻找,如果浏览器存储了访问的地址,它就会自己返回ip,如果没有找到,浏览器会发送系统调用来查询本机的hosts文件来查看ip地址,如果找到就返回,如果上两个步骤都没有找到ip,那浏览器就会向网络发送一个DNS查询。
# DNS
DNS的全称是域名系统,它提供了主机名到IP地址的转换服务,网络识别主机的方式有两种,一种是主机名,一种是IP地址。所以DNS是一种由分层的DNS服务器实现的分布式数据库,DNS运行在UDP上。
# GET和POST区别
这两种请求方式是最常见的,GET一般是用来查询的,也就是我们访问数据的时候,比如加载一些信息,POST一般是用来提交数据的,也就是我们提交数据的时候,比如登录用户,Form表单提交。
# GET
GET的请求数据会放在URL中,通过?和&来分割,它是有一定的长度限制的,它在请求的时候,它会发送一个TCP数据包,浏览器会把头部信息以及data数据一起发送出去,服务器响应200,GET在进行浏览器回退前进的时候是不会改变的
# POST
POST得请求数据会放在请求体body中,一般是通过JSON的格式来进行传输,它是没有长度限制的,在请求的时候,POST会发送两个TCP数据包,一个是头部的信息,还有一个是数据,浏览器先发送头部信息header,待服务器响应100继续的时候,再发送数据data,服务器成功后返回200。