【前端面试】网络篇

HTTP和HTPPS

HTTP(Hypertext Transfer Protocol)和HTTPS(Hypertext Transfer Protocol Secure)是用于在客户端和服务器之间传输数据的协议,它们有以下区别:

  1. 安全性:

    • HTTP是明文传输协议,数据在传输过程中不加密,容易被窃听和篡改。因此,HTTP不适合传输敏感信息,如密码、银行账号等。
    • HTTPS通过使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议对数据进行加密和认证,确保数据的机密性和完整性。HTTPS使用公钥加密算法来加密数据传输,防止数据被窃听和篡改。
  2. 默认端口:

    • HTTP默认使用端口80进行通信。
    • HTTPS默认使用端口443进行通信。
  3. 证书:

    • HTTPS需要使用SSL证书来进行加密和认证。SSL证书由受信任的证书颁发机构(CA,Certificate Authority)签发,用于验证服务器的身份。客户端在与服务器建立连接时会检查证书的有效性和合法性。
    • HTTP不需要证书,因为数据传输是明文的,无法提供身份验证和数据的安全性。
  4. URL前缀:

    • HTTP的URL以http://开头。
    • HTTPS的URL以https://开头,表明使用了安全的加密连接。
  5. 性能:

    • 由于HTTPS需要进行加密和解密操作,相对于HTTP而言,HTTPS的传输速度略慢一些。这是因为加密和解密的过程需要计算资源和时间。
    • 但是,随着硬件和软件的不断发展,对HTTPS的加密算法的优化以及缓存和复用技术的应用,HTTPS的性能已经大大提升,可以满足大多数应用的需求。

TCP三次握手和四次挥手

TCP(Transmission Control Protocol)是一种可靠的传输协议,而三次握手和四次挥手是TCP连接的建立和断开过程中的重要步骤。

三次握手(Three-Way Handshake)是在建立TCP连接时使用的步骤,它的过程如下:

  1. 第一步(SYN):

    • 客户端向服务器发送一个SYN(同步)报文,其中包含一个随机的初始序列号(ISN)。
    • 客户端进入SYN_SENT状态,等待服务器的响应。
  2. 第二步(SYN-ACK):

    • 服务器收到客户端的SYN报文后,向客户端发送一个SYN-ACK(同步-确认)报文,其中确认号(ACK)为客户端的ISN加1,并包含服务器自己的随机初始序列号(ISN)。
    • 服务器进入SYN_RECV状态。
  3. 第三步(ACK):

    • 客户端收到服务器的SYN-ACK报文后,向服务器发送一个ACK(确认)报文,其中确认号为服务器的ISN加1,同时将序列号设置为客户端的ISN加1。
    • 服务器收到ACK报文后,连接建立,双方进入ESTABLISHED状态,可以进行数据传输。

四次挥手(Four-Way Handshake)是在断开TCP连接时使用的步骤,它的过程如下:

  1. 第一步(FIN):

    • 当一个端点(通常是客户端)决定关闭连接时,它向另一个端点发送一个FIN(结束)报文段。
    • 发送FIN的一方进入FIN_WAIT_1状态。
  2. 第二步(ACK):

    • 接收到FIN的一方发送一个ACK(确认)报文作为回应,确认收到FIN,并进入CLOSE_WAIT状态。
    • 发送ACK的一方进入FIN_WAIT_2状态。
  3. 第三步(FIN):

    • 接收到ACK的一方(通常是服务器)也决定关闭连接,向发送FIN的一方发送一个FIN报文段。
    • 发送FIN的一方进入LAST_ACK状态。
  4. 第四步(ACK):

    • 接收到FIN的一方发送一个ACK报文作为回应,确认收到FIN,并进入TIME_WAIT状态。
    • 发送ACK的一方收到ACK后,进入CLOSED状态,连接关闭。

在四次挥手完成后,双方的连接被完全关闭。TIME_WAIT状态是为了确保双方完全收到对方的确认,避免出现旧数据包对新连接的干扰。TIME_WAIT状态持续一段时间后,连接最终关闭。

在浏览器输入网址的过程发生了什么?

当在浏览器中输入网址并按下回车键时,以下是大致的过程:

  1. URL解析:

    • 浏览器首先解析输入的网址(URL),提取出协议(如HTTP或HTTPS)、域名和路径等信息。
  2. DNS解析:

    • 浏览器向本地DNS解析器发送一个DNS查询请求,以获取输入的域名对应的IP地址。
    • 如果本地DNS缓存中有对应的IP地址,则直接返回,否则本地DNS解析器会向上级DNS服务器发送请求,逐级进行查询,直到找到对应的IP地址。
    • 一旦本地DNS解析器获取到IP地址,它会将IP地址返回给浏览器。
  3. 建立TCP连接:

    • 浏览器使用获取到的IP地址和协议信息,与服务器建立TCP连接。这个过程涉及到TCP的三次握手,确保双方能够正常通信。
  4. 发起HTTP请求:

    • 一旦TCP连接建立成功,浏览器会发送一个HTTP请求给服务器。
    • HTTP请求中包含了请求方法(GET、POST等)、请求头(包含用户代理、Cookie等信息)和请求体(对于POST请求)等。
  5. 服务器处理请求:

    • 服务器接收到浏览器发送的HTTP请求后,会根据请求的内容进行相应的处理。这可能涉及到读取文件、执行服务器端脚本、查询数据库等操作。
  6. 服务器发送HTTP响应:

    • 服务器根据请求的处理结果生成一个HTTP响应,包括状态码、响应头和响应体。
    • 响应头中包含了一些关于响应的元信息,如内容类型、缓存策略等。
    • 响应体中包含了服务器返回的实际数据,如HTML、CSS、JavaScript等。
  7. 数据传输:

    • 服务器将生成的HTTP响应通过TCP连接发送给浏览器。
    • 数据通过分割成多个数据包进行传输,确保可靠性和完整性。
  8. 渲染页面:

    • 浏览器接收到HTTP响应后,根据响应的内容进行页面渲染。
    • 浏览器解析HTML、CSS和JavaScript,构建DOM树、CSSOM树和渲染树,并进行布局和绘制,最终将页面显示给用户。

get和post的区别

GET和POST是HTTP协议中最常用的两种请求方法,它们在以下几个方面有区别:

  1. 数据传输位置:

    • GET请求将数据附加在URL的查询参数中,通过URL传输给服务器。例如,http://example.com/api?param1=value1&param2=value2
    • POST请求将数据包含在请求体中,不会直接显示在URL中。
  2. 数据传输大小限制:

    • GET请求对URL长度有限制,不同浏览器和服务器对URL长度的限制不同,但通常在几千个字符左右。
    • POST请求没有严格的大小限制,可以传输较大的数据。
  3. 数据安全性:

    • GET请求的数据会附加在URL中,因此在浏览器的历史记录、服务器日志和网络设备日志中都可以看到传输的数据。这使得GET请求的数据相对不安全,特别是对于包含敏感信息的情况。
    • POST请求的数据在请求体中,不会直接显示在URL中,相对于GET请求更安全一些。
  4. 请求语义:

    • GET请求用于获取(或查询)资源,不应该对服务器端产生副作用。它应该是幂等的,即多次执行同样的GET请求应该返回相同的结果,不会改变服务器状态。
    • POST请求用于向服务器提交数据,可以对服务器端产生副作用,例如创建、更新或删除资源。它可能是非幂等的,即多次执行同样的POST请求可能会导致不同的结果或改变服务器状态。
  5. 缓存:

    • GET请求可以被缓存,浏览器可以缓存GET请求的响应结果,以便在后续的请求中重复使用。
    • POST请求默认情况下不会被缓存,每次发送POST请求都会向服务器请求新的响应。

TCP和UDP的区别 TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种常见的传输层协议,它们有以下区别:

  1. 可靠性:

    • TCP是一种可靠的协议,通过使用确认、序列号和重传机制来确保数据的可靠传输。TCP会检测数据包的丢失、重复和损坏,并进行相应的处理。
    • UDP是一种不可靠的协议,它不提供数据包的确认和重传机制。UDP发送数据时,不会对数据包进行确认,也不会重传丢失的数据包,因此无法保证数据的可靠性。
  2. 连接性:

    • TCP是面向连接的协议,通信双方在传输数据之前需要先建立连接。连接的建立和断开涉及到三次握手和四次挥手的过程。
    • UDP是无连接的协议,通信双方直接发送数据包,无需建立连接。每个数据包都是独立的,互相之间没有依赖关系。
  3. 速度和效率:

    • TCP在提供可靠性的同时,会引入一定的开销,如确认、重传和拥塞控制等机制。这些机制会增加传输延迟和网络负载,因此相对于UDP而言,TCP的速度较慢。
    • UDP没有确认、重传和拥塞控制等机制,因此传输速度相对较快,延迟较低。但是,UDP无法保证数据的可靠性和顺序性。
  4. 应用场景:

    • TCP适用于那些需要可靠数据传输和顺序性的应用,如网页浏览、文件传输、电子邮件和远程登录等。
    • UDP适用于那些对数据传输速度要求较高,但对数据可靠性要求较低的应用,如实时音视频传输、在线游戏和DNS解析等。

总结起来,TCP提供可靠的、面向连接的数据传输,适用于需要数据完整性和可靠性的应用;而UDP提供无连接的、不可靠的数据传输,适用于对传输速度和实时性要求较高的应用。选择使用TCP还是UDP取决于应用的具体需求和特点。

状态码以及比较

分类 分类描述
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误

http1.0和http1.1和http2.0的区别

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议。下面是HTTP 1.0、HTTP 1.1和HTTP 2.0之间的一些主要区别:

  1. 持久连接:

    • HTTP 1.0使用短连接,每次请求都需要建立一个新的TCP连接,请求完成后立即关闭连接。这会导致频繁建立和关闭连接的开销。
    • HTTP 1.1引入了持久连接(Keep-Alive),允许在单个TCP连接上发送多个HTTP请求和响应,减少了连接建立和关闭的开销。
  2. 并发请求:

    • HTTP 1.0中的持久连接虽然允许多个请求复用一个连接,但是这些请求只能按照顺序串行发送和接收,即使一个请求已经完成,后续的请求仍然需要等待。
    • HTTP 1.1支持并发请求,允许在同一个连接上同时发送多个请求,提高了并发性能。
  3. 请求头压缩:

    • HTTP 1.0和1.1中的请求和响应头信息都是以纯文本形式发送,每次请求都会携带相同的头信息,造成了较大的数据冗余。
    • HTTP 2.0使用了HPACK压缩算法对请求和响应头进行压缩,减少了数据传输的大小,提高了传输效率。
  4. 二进制传输:

    • HTTP 1.0和1.1使用基于文本的协议,请求和响应数据都是以纯文本形式传输。
    • HTTP 2.0使用二进制协议,将请求和响应数据分割为二进制帧进行传输,减少了解析和处理的复杂性。
  5. 多路复用:

    • HTTP 1.0和1.1中,每个请求都需要独立的TCP连接,导致连接数过多,增加了网络负载和延迟。
    • HTTP 2.0引入了多路复用,允许在同一个连接上同时发送和接收多个请求和响应,提高了连接的利用率和性能。
  6. 服务器推送:

    • HTTP 1.0和1.1中,服务器只能在客户端请求后才能发送响应数据。
    • HTTP 2.0支持服务器推送(Server Push),服务器可以主动推送资源给客户端,提前发送可能需要的资源,减少了客户端的等待时间。

需要注意的是,HTTP 2.0在语义上与HTTP 1.1保持一致,只是在传输层进行了优化和改进,因此应用程序和开发人员无需对现有的HTTP请求和响应进行修改。

HTTP 2.0相对于HTTP 1.0和1.1带来了更好的性能和效率,特别在高并发和高负载的环境中表现更为出色。但是,由于网络和服务器的支持限制,不是所有的浏览器和服务器都支持HTTP 2.0协议。

相关推荐
并不会42 分钟前
常见 CSS 选择器用法
前端·css·学习·html·前端开发·css选择器
衣乌安、1 小时前
【CSS】居中样式
前端·css·css3
兔老大的胡萝卜1 小时前
ppk谈JavaScript,悟透JavaScript,精通CSS高级Web,JavaScript DOM编程艺术,高性能JavaScript pdf
前端·javascript
低代码布道师1 小时前
CSS的三个重点
前端·css
耶啵奶膘2 小时前
uniapp-是否删除
linux·前端·uni-app
王哈哈^_^4 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
cs_dn_Jie4 小时前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
开心工作室_kaic5 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js
有梦想的刺儿5 小时前
webWorker基本用法
前端·javascript·vue.js
cy玩具6 小时前
点击评论详情,跳到评论页面,携带对象参数写法:
前端