Http高级interview

ops/2024/11/14 4:04:15/
http://www.w3.org/2000/svg" style="display: none;">

https_0">1、Http https区别

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、httphttps使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议>网络协议,比http协议安全。

2、tcp/ip的五层模型:

Http位于TCP/IP模型中的第几层?为什么说Http是可靠的数据传输协议?

HTTP位于TCP/IP模型中的应用层,它是基于TCP协议实现的

从下到上:物理层->数据链路层->网络层->传输层->应用层

其中tcp/ip位于模型中的网络层,处于同一层的还有ICMP(网络控制信息协议)。http位于模型中的应用层

由于tcp/ip是面向连接的可靠协议,而http是在传输层基于tcp/ip协议的,所以说http是可靠的数据传输协议。

3、OSI七层模型

  1. 物理层:负责传输比特流,包括电气、光学和机械接口。
  2. 数据链路层:负责在直接相连的节点之间传输数据帧,并提供物理地址寻址和错误检测等功能。
  3. 网络层:负责在不同网络之间进行路由选择和数据包转发,实现端到端的数据传输。
  4. 传输层:负责提供可靠的端到端数据传输,包括流量控制、拥塞控制和错误恢复等功能。
  5. 会话层:负责建立、管理和终止应用程序之间的会话连接。
  6. 表示层:负责数据的格式化、加密和压缩等操作,以确保不同系统之间的数据交换。
  7. 应用层:提供用户与网络之间的接口,包括各种应用协议,如HTTP、FTP、SMTP等。

这个模型帮助了网络工程师理解和设计网络协议>网络协议和系统,并促进了不同厂商之间的互操作性。

4、TCP和UDP的区别

tcp是面向连接的,由于tcp连接需要三次握手,所以能够最低限度的降低风险,保证连接的可靠性。

udp 是无连接的,udp建立连接前不需要与对象建立连接,无论是发送还是接收,都没有发送确认信号。所以说udp是不可靠的。

由于udp不需要进行确认连接,使得UDP的开销更小,传输速率更高,所以实时行更好。

http请求是在协议哪层上封装的

http是应用层协议,tcp是传输层协议,http本来就是基于传输层协议做的封装。

5、Tcp/IP三次握手,四次挥手

1.第一次握手

客户端向服务端发送连接请求报文段。该报文段的头部中同步SYN=1,确认ACK=0,同时选择一个初始序号seq=x。请求发送后,客户端便进入SYN-SENT状态。

SYN=1,ACK=0表示该报文段为连接请求报文

x为本次TCP通信的字节流的初始序号

TCP规定:SYN=1的报文段不能有数据部分,但要消耗掉一个序号

2.第二次握手

服务端收到连接请求报文段后,如果同意连接,会发送一个应答:SYN=1,ACK=1,seq=y,ack=x+1。发送完应答后服务端进入SYN-RCVD状态。

SYN=1,ACK=1表示该报文段为连接同意的应答报文

seq=y表示服务端作为发送者时,发送字节流中的第一个字节序号

ack=x+1表示服务端希望客户端发送的下一个数据报初始序号是从x+1开始

3.第三次握手

客户端收到服务端连接同意的应答后,还会向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。该报文段的头部为:ACK=1,seq=x+1,ack=y+1。

客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTABLISHED状态,此时连接的建立完成!

四次挥手

1.第一次挥手

客户端数据发送完成,则它向服务端发送连接释放请求。该请求只有报文头,头中携带的主要参数为:FIN=1,seq=u。此时,客户端将进入FIN-WAIT-1状态。TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

FIN=1表示该报文段是一个连接释放请求

seq=u,u-1是客户端向服务端发送的最后一个字节的序号

2.第二次挥手

服务器收到客户端连接释放报文,通知相应的高层应用进程,告诉它客户端向服务器这个方向的连接已经释放了。

此时服务端进入了CLOSE-WAIT(关闭等待)状态,并向客户端发出连接释放的应答,其报文头包含:ACK=1,ack=u+1,并且带上自己的序列号seq=v。

ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答

seq=v,v是服务端释放应答报文段第一个字节序号

ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节客户端收到该应答后,进入FIN-WAIT-2状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

第二次挥手完成后,客户端到服务端方向的连接已经释放,服务端不会再接收客户端的数据,客户端也没有数据要发送了。但服务端到客户端方向的连接仍然存在,服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

3.第三次挥手

服务端将最后的数据发送完毕后,就向客户端发送连接释放报文,其报文头包含:FIN=1,ack=u+1,由于在CLOS-WAIT状态,服务端很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

4.第四次挥手

客户端收到服务器的连接释放报文后,向服务端发出确认应答,报文头:ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。

该状态会持续2MSL(最长报文段寿命)时间,这个期间TCP连接还未释放,若该时间段内没有服务端的重发请求的话,客户端就进入CLOSED状态,撤销TCB。

服务端只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。 作者:Xia_燚 https://www.bilibili.com/read/cv17017914 出处:bilibili

6、Http版本演进

  1. HTTP/0.9:最早的版本,仅支持纯文本传输,没有头部信息和请求方法,只能获取HTML格式的文档。

  2. HTTP/1.0:引入了请求头和响应头的概念,支持多种数据类型的传输,每个请求都会建立一个新的连接。

  3. HTTP/1.1:在HTTP/1.0的基础上进行了改进和扩展。新增了持久连接、管道化、分块传输编码等特性,提高了性能和效率。同时,还引入了PUT和DELETE请求方法,用于上传和删除服务器上的资源。

  4. HTTP/2:采用二进制传输格式,引入了多路复用技术,允许同时发送多个请求和响应,提高了并发性能。

  5. HTTP/3:基于UDP协议的QUIC协议,提供更快的连接建立和数据传输速度,具有更好的安全性。


http://www.ppmy.cn/ops/87356.html

相关文章

杭州网络安全等级保护测评认证的基本流程

杭州网络安全等级保护测评认证,作为守护数字边界的重大责任,其流程科学而严谨。以下是概述,引领您洞悉杭州地区等级保护的认证之道: 1. 系统识别与定级 通过对系统的识别,根据企业的性质和重要程度,准确地…

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙 文章目录 代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙17.太平洋大西洋水流问题一、DFS二、BFS三、本题总结 82…

【python的语法特点,如注释规则、代码缩进、编写规范等】

介绍一下python的语法特点,如注释规则、代码缩进、编写规范等 Python 是一种广泛使用的高级编程语言,以其简洁易读的语法、丰富的标准库和强大的第三方库而闻名。下面我将详细介绍 Python 的一些基本语法特点,包括注释规则、代码缩进、以及编…

SA后缀数组

基础概念&#xff1a; 子串&#xff1a; 在一个字符串s中&#xff0c;取任意i<j,那么从i到j的这一段就叫做s的一个子串 后缀&#xff1a; 从字符串s的某个位置i到字符串末尾的子串&#xff0c; suff[i]: 以s的第i个字符为第一个元素的后缀 后缀数组&#xff1a; 现有字符…

Java:多线程(进程线程、线程状态、创建线程、线程操作)

1&#xff0c;线程概述 1.1&#xff0c;进程和线程 并发是指系统能够同时处理多个任务或操作&#xff0c;通常通过在单个处理器或多个处理器之间快速切换上下文来实现。这些任务可能不是同时进行的&#xff0c;但是它们在时间上重叠。 并行是指系统同时执行多个任务或操作&…

分布式锁详解

文章目录 分布式锁基于数据库的分布式锁基于Redis的分布式锁基于Zookeeper的分布式锁基于Consul的分布式锁 分布式锁 在单机程序中&#xff0c;我们常用ReetrantLock、synchronized保证线程安全。类似这样&#xff1a; public class MainTest {private static final Reentra…

Linux-3:Shell编程——基础语法(0-50%)

目录 前言 一、变量 1.定义变量 2.使用变量 3.修改变量 4.将命令的结果赋值给变量 5.只读变量 6.删除变量 二、传递参数 三、字符串 1.字符串举例 2.统计字符串长度 3.字符串拼接 4.截取字符串 总结 前言 Shell是一种程序设计语言。作为命令语言&#xff0c;它…

一篇文章带你入门爬虫并编写自己的第一个爬虫程序

一、引言 目前我们处在一个信息快速迭代更新的时代&#xff0c;海量的数据以大爆炸的形式出现在网络之中&#xff0c;相比起过去那个通过广播无线电、书籍报刊等传统媒介获取信息的方式&#xff0c;我们现在通过网络使用搜索引擎几乎可以获得任何我们需要的信息资源。 但与此同…