最后更新:2020-03-11 10:54:48 手机定位技术交流文章
硬核!在面试过程中,被提问的概率仍然相对较高,如30个常见问题

CSDN
1583758587作者|小林编码
来源|小林编码所示
小林我收集了五类在HTTP采访中经常问的问题。与此同时,这五类问题与HTTP的发展和演变相关。通过问答+图表的形式,我帮助大家从浅入深地进一步学习和理解HTTP协议。什么是
HTTP基本概念
Get和Post
HTTP功能
HTTPS和HTTP
HTTP/1.1、HTTP/2、HTTP/3演进
大纲
HTTP基本概念
HTTP?描述
超文本传输协议,即超文本传输协议。
能详细解释超文本传输协议吗?
的名称为“超文本协议传输”,可分为三部分:
超文本
传输
协议
三部分
1。“协议”
在我们的生活中,我们也可以随处看到“协议”,例如:
将在他刚毕业时签署一份“三方协议”;
在找房子时会签了一份“租房协议”;
三方协议和
租赁协议与计算机中的协议基本相同。协议的特点:
“关联”意味着必须有两个以上的参与者例如,三方协议中有三个参与者:你、公司和学校。租赁协议中有两个参与者:你和房东。单词
“一”对参与者来说是一种行为协议和规范。例如,三方协议规定了试用期和遣散费。租赁协议规定了租赁期限、月租金金额、如何处理违约等。对于HTTP协议
,我们可以这样理解它
HTTP是计算机世界中使用的一种协议它使用计算机可以理解的语言来建立计算机(两个以上参与者)之间的通信规范,以及相关的控制和错误处理方法(行为约定和规范)
2。“传输”
所谓的“传输”是指将一堆东西从一点移动到另一点,或者从一点移动到另一点
不要低估这个简单的动作,它至少包含两个重要的信息
HTTP协议是一个双向协议
当我们上网时,浏览器是请求者,百度网站是响应者双方同意使用HTTP协议进行通信,因此浏览器向网站发送请求数据,网站向浏览器返回一些数据。最后,浏览器将数据呈现在屏幕上,以查看图片和视频。
请求-回复虽然
数据在A和B之间传输,但允许有中间传输或中继
就像第一排的学生想把笔记传给最后一排的学生,所以很多学生(中间人)在传输过程中需要通过,这种传输模式从“A”开始;“乙”变成了“甲”;N <。->。M <。->。〔b〕
和在HTTP中,中间人被要求遵循HTTP协议,只要它不干扰基本的数据传输,任何附加的东西都可以添加。
对于传输,我们可以进一步了解HTTP
HTTP是一种约定和规范,专门用于在计算机世界的两点之间传输数据。
3。“超文本”
的传输内容是“超文本”让我们首先理解“文本”。在互联网的早期,它只是简单的字符文本,但现在“文本”“HTTP”的含义可以扩展到图片、视频、压缩数据包等。在http看来,这些都被视为“文本”
理解“超文本”,它是超越普通文本的文本,它是文本、图片、视频等的混合体。关键是超链接,可以从一个超文本跳到另一个超文本
HTML是最常见的超文本。这只是一个纯文本文件,但是许多标签被用来定义图片、视频等的链接。在被浏览器解释之后,呈现给我们的是一个包含文本和图片的网页。
好,在详细解释了超文本传输协议中的三个名词之后,我们可以给出一个比七个词“超文本传输协议”更准确和技术性的答案:
超文本传输协议是一个“合同和规范”,它在计算机世界的“两点”之间“传输”文本、图片、音频、视频和其他“超文本”数据。
“HTTP是用于将超文本从互联网服务器传输到本地浏览器的协议”是真的吗?语句
不正确。因为它也可以是“服务器”服务器”,所以两点之间的描述会更加准确
HTTP的常见状态代码是什么?
五类HTTP状态码
1xx
1xx类状态码属于提示信息,是协议处理中的中间状态,在实践中很少使用
2x
2xx类状态代码表示服务器成功处理了客户端的请求,这也是我们最希望看到的状态。
“200正常”是最常见的成功状态代码,表示一切正常。如果它不是HEAD请求,服务器返回的响应头将有正文数据。
“204无内容”也是一个常见的成功状态代码,与200正常基本相同,但是响应头没有主体数据。
“206部分内容”应用于HTTP块下载或关机恢复传输,表示响应返回的主体数据不是全部资源,而是其中的一部分,也是服务器处理成功的状态。
3xx
3xx类状态代码表示客户端请求的资源已经改变,客户端需要用新的网址重新发送请求以获得资源,即重定向。
"301永久移动"表示永久重定向,表示请求的资源不再存在,需要用新的网址再次访问
"302永久移动"表示临时重定向,表示请求的资源仍然可用,但需要由另一个网址暂时访问
301和302都将使用响应头中的“位置”字段来指示要跳转到的网址,浏览器将自动重定向新的网址。
"304未修改"没有跳转的意思,这意味着资源没有被修改,现有的缓冲文件被重定向,也称为缓存重定向,用于缓存控制。类
4 x
4 xx状态代码表示客户端发送的消息不正确,服务器无法处理,这就是错误代码的含义
"400错误请求"表示客户端请求的消息有错误,但这只是一般错误
“403禁止”表示服务器禁止访问资源,这不是客户端请求中的错误
"404未找到"表示请求的资源不存在或在服务器上找不到,无法提供给客户端
5xx
5xx类状态代码表示客户端请求消息是正确的,但是在服务器处理期间发生了内部错误,属于服务器端的错误代码
"500内部服务器错误"和400类型是一般和常见的错误代码。我们不知道服务器发生了什么错误。
“501未实现”表示客户端请求的功能尚未得到支持,表示“即将打开,请期待”
"502 bad gateway "通常是服务器作为网关或代理返回的错误代码,表示服务器本身工作正常,并且在访问后端服务器时出错。
"503服务不可用"表示服务器当前正忙,暂时无法响应服务器。意思是“网络服务忙,请稍后再试”
http的公共字段是什么?当
主机
客户端发送请求时,它指定服务器的域名
主持人:www。com
有一个主机字段,允许将请求发送到同一台服务器上的不同网站
内容长度字段
服务器在返回数据时将有一个内容长度字段,指示此响应的数据长度。
content-length:1000
如上所示,告诉浏览器此服务器响应的数据长度为1000字节,以下字节属于下一个响应。
连接字段
连接字段最常用于客户端要求服务器使用TCP持久连接以便其他请求可以被多路复用的情况。版本
HTTP/1.1的默认连接是持久连接,但是为了与旧版本的HTTP兼容,您需要将连接头字段的值指定为保持活动
连接:保持活动
建立可重用的TCP连接,直到客户端或服务器主动关闭该连接但是,这不是一个标准字段
内容类型字段
内容类型字段告诉客户端服务器响应时数据的格式。
内容类型:文本/html;字符集=utf-8
以上类型表示网页已发送,编码为utf-8当
客户端请求时,它可以使用“接受”字段来声明它可以接受哪些数据格式。
接受:*/*
在上面的代码中,客户端声明它可以接受任何格式的数据。
内容编码字段
内容编码字段描述数据的压缩方法指示服务器返回的数据使用何种压缩格式
内容编码:gzip
。上面指出服务器返回的数据在gzip模式下被压缩,通知客户端它需要以这种方式解压缩。请求时,
客户端使用接受编码字段来指示它们可以接受哪些压缩方法。
接受编码:gzip,平减
GET和POST
GET和POST有什么区别?
Get方法意味着请求从服务器获取资源,可以是静态文本、页面、图片、视频等。
例如,如果您打开我的文章,浏览器将向服务器发送一个GET请求,服务器将返回文章的所有文本和资源。
获取请求
,而开机自检方法是相反的操作。它向URI指定的资源提交数据,并将数据放在消息的正文中
例如,如果您在我的文章底部键入一条消息并单击“提交”(表示您的消息),浏览器将执行一个POST请求,将您的消息文本放入消息正文,拼接POST请求头,并通过TCP协议将其发送到服务器
POST请求
GET和POST方法安全且幂等吗?
首先解释了较低安全性和幂等性的概念:
在HTTP协议中,所谓的“安全性”意味着请求方法不会“破坏”服务器上的资源
所谓的“幂等”是指多次执行相同的运算,结果是“相同的”
,那么GET方法显然是安全的和幂等的,因为它是一个“只读”操作。无论运行多少次,服务器上的数据都是安全的,每次运行的结果都是一样的。
POST是不安全的,因为它是一种“添加或提交数据”操作,会修改服务器上的资源,并且多次提交数据会创建多个资源,因此它不是幂等的
HTTP功能
您对HTTP(1.1)的优势了解多少,它们是如何体现的?
HTTP最突出的优势是“简单、灵活、易于扩展、广泛使用和跨平台”
1。简单的
HTTP基本消息格式是表头+正文,表头信息也是键值简单文本的形式,容易理解,降低了学习和使用的门槛
2。灵活且易于扩展每个组件的需求,如各种请求方法、URL网址、状态代码、
HTTP协议中的头字段都没有固定,允许开发人员对其进行定制和扩展。
当HTTP在应用层(OSI第7层)工作时,它的下层可以随意改变。
HTTPS还在协议层和协议层之间增加了安全传输层,协议层甚至用基于UDP的QUIC取代了TCPP层
3。广泛使用和跨平台
互联网发展至今。HTTP有非常广泛的应用,从桌面浏览器到手机上的各种应用,从看新闻和发帖到购物、财务管理和吃鸡肉。HTTP的应用程序已经成了碎片,同时自然具有跨平台的优势。
它的缺点是什么?
HTTP协议既有优点也有缺点,即“无状态和明文传输”和“不安全”
1。无状态双刃剑
无状态的好处在于,因为服务器不记得HTTP状态,所以它不需要额外的资源来记录状态信息,这样可以减轻服务器的负担,并且可以使用更多的CPU和内存来为外界提供服务
无状态的缺点,由于服务器没有内存能力,在完成相关操作时会很麻烦
例如登录->;添加购物车->。订单->。结算->。支付时,这一系列操作必须知道用户的身份然而,服务器不知道这些请求是相关的,并且每次都必须询问身份信息。
这样,每次操作时,都必须验证信息。这种购物体验愉快吗?不要问,问是酸的!
对于无状态问题,有许多解决方案,其中Cookie技术是最简单的一种。
Cookie通过在请求和响应消息中写入Cookie信息来控制客户端的状态
相当于在客户第一次请求后,服务器将发布一个包含客户信息的“小标签”。当客户端稍后请求服务器时,服务器会识别出“小标签”。
Cookie技术
2。双刃剑
明文的明文传输意味着传输过程中的信息易于阅读,可以通过浏览器的F12控制台或Wireshark抓包直接用肉眼查看,给我们的调试工作带来很大的方便
,但事实正是如此。所有的HTTP信息都暴露在光天化日之下,这相当于信息裸奔。在漫长的传输过程中,信息的内容毫无隐私可言,很容易被窃取。如果里面有你的账号和密码信息,那么你的号码就没了。
3。不安全的
HTTP有一个不安全的严重缺点:
通信使用明文(未加密),内容可能被窃听例如,账户信息很容易泄露,然后你的号码就没了。
不验证通信方的身份,因此可能会遇到伪装。例如,如果你访问假淘宝并且经常打架,那么你的钱就没了。
不能证明消息的完整性,因此它可能已被篡改。例如,网页上充斥着垃圾广告、视觉污染和失明。HTTPS可以解决
HTTP的安全问题,即通过引入SSL/TLS层,安全性达到了极致。
那么HTTP/1.1的性能如何?
HTTP协议基于TCP/IP,使用“请求-应答”通信模式,因此性能的关键在于这两点。
1。长连接
早期的HTTP/1.0性能中的一个大问题是,每个请求都被启动,一个新的TCP连接(三次握手)被创建,并且它是一个串行请求,这使得无所畏惧的TCP连接建立和断开,增加了通信开销。
为了解决上述的TCP连接问题,HTTP/1.1提出了一种长连接的通信方法,也称为持久连接。这种方法的优点是,它减少了由于重复建立和断开TCP连接而导致的额外开销,并减少了服务器端的负载。
持久连接的特点是只要任一端没有明确提出断开,就保持TCP连接状态。
短连接和
2长连接。管道网络传输
HTTP/1.1采用长连接,使管道网络传输成为可能
可以在同一个TCP连接中,客户端可以发起多个请求,只要发出第一个请求,就可以发出第二个请求,无需等待它回来,这样可以减少整体响应时间。
例如,一个客户端需要请求两个资源以前,在同一个TCP连接中,首先发送一个请求,然后服务器等待响应,b请求在接收之后发送。管道机制允许浏览器同时发出A和B请求。
管道网络传输
,但服务器仍按顺序响应A请求,完成后再响应B请求。如果前面的响应特别慢,将会有许多请求在后面排队等候。这被称为“团队头堵塞”
3。队列头阻塞
“请求-回复”模式加剧了HTTP性能问题
,因为当顺序发送的请求序列中的一个请求由于某种原因被阻塞时,稍后排队的所有请求都被一起阻塞,这将导致客户端始终无法请求数据,这也称为“队列头阻塞”就像上班路上的交通堵塞
队列头阻塞
简而言之,HTTP/1.1的性能一般是相同的,下面的HTTP/2和HTTP/3正在优化HTTP的性能
HTTP和http
http与HTTPS有什么区别?
HTTP是超文本传输协议,信息以明文传输,存在安全风险问题。HTTPS解决了HTTP不安全的问题。在传输控制协议和传输控制协议网络层之间增加了安全协议,以实现消息的加密传输。
HTTP连接的建立相对简单,HTTP消息传输可以在TCP三次握手后进行然而,HTTPS需要在TCP三次握手之后进行SSL/TLS握手过程,以进入加密消息传输。
HTTP的端口号是80,HTTPS的端口号是443
HTTPS协议需要从ca(证书颁发机构)申请数字证书,以确保服务器的身份是真实的。
HTTPS能解决什么问题?因为
HTTP是明文传输的,所以在安全性上有三个风险:
窃听风险,例如,通信内容可以在通信链路上获得,用户号码容易丢失
篡改风险,如强制输入垃圾广告、视觉污染和用户失明
模拟风险。例如,如果用户假冒淘宝网站,他们很容易赚钱。
超文本传输协议在超文本传输协议和传输控制协议层之间增加了SSL/TLS协议
HTTP和HTTPS
能很好的解决上述风险:
信息加密:互动信息不会被盗,但你的号码会因为“忘记自己”账号而丢失
验证机制:无法篡改通讯内容,否则无法正常显示,但百度的“竞争排名”仍然可以搜索垃圾广告。
身份证明:证明淘宝是一个真正的淘宝网站,但你的钱还是会因为“剁手”而丢失
表明,只要不做“坏事”,SSL/TLS协议就能保证通信安全
HTTPS如何解决上述三个风险?
混合加密方法实现了信息的保密性,解决了窃听的风险。
抽象算法实现完整性,它可以为数据生成唯一的“指纹”,指纹用于验证数据的完整性,解决篡改风险
将服务器公钥放入数字证书中,这解决了模拟的风险。
1。混合加密
可确保信息的机密性,并通过混合加密解决窃听风险
混合加密
HTTPS使用“混合加密”方法,该方法结合了对称加密和非对称加密:
在建立通信之前使用非对称加密来交换“会话密钥”,然后不再使用非对称加密
在通信过程中使用对称加密的“会话密钥”加密明文数据
之所以采用“混合加密”方法,是因为
对称加密只使用一个密钥,运算速度快,而且密钥必须保密,因此不可能实现安全的密钥交换。
非对称加密使用两个密钥:公钥和私钥。公钥可以任意分发,私钥保密,解决了密钥交换的问题,但速度慢。
2。抽象算法
抽象算法用于实现完整性,可以为数据生成唯一的“指纹”,用于验证数据的完整性,并解决篡改的风险
检查完整性
客户端将在发送明文之前通过摘要算法计算明文的“指纹”。发送时,“指纹+明文”将一起加密成一个秘密文本,然后发送到服务器。服务器解密后,将使用相同的摘要算法计算发送的明文。通过将客户端携带的“指纹”与当前计算的“指纹”进行比较,如果“指纹”相同,则数据是完整的
3。数字证书
客户端首先向服务器请求公钥,然后用公钥加密信息。服务器收到密文后,用自己的私钥解密
这有一些问题,如何保证公钥不被篡改和信任?
,因此这里我们需要使用第三方机构CA(数字证书机构)将服务器的公钥放在数字证书(由数字证书机构颁发)中。只要证书是可信的,公钥就是可信的。
数字证书工作流
通过数字证书保证服务器公钥的身份,并解决假冒的风险
HTTPS如何建立连接?他们与什么互动?
SSL/TLS协议基本流程:
客户端从服务器请求并验证服务器的公钥
方协商产生“会话密钥”
双方使用“会话密钥”进行加密通信。
的前两个步骤是SSL/TLS建立过程,也是握手阶段。
SSL/TLS的握手阶段涉及四个通信,如下图所示:
HTTPS连接建立过程
SSL/TLS协议建立详细过程:
1。首先,客户端向服务器发起一个加密的通信请求,这就是客户端问候请求
在此步骤中,客户端主要向服务器发送以下信息:
(1)客户端支持的SSL/TLS协议版本,如TLS版本1.2
(2)客户端随机数,稍后用于生成“会话密钥”
(3)客户端支持的密码套件列表,如RSA加密算法
2。服务器收到客户端的请求后,向客户端发送一个响应,即服务器您好。服务器响应的内容如下:
(1)确认SSL/ TLS协议版本,如果浏览器不支持,则关闭加密通信
(2)由服务器产生的随机数,后来用来产生“会话密钥”
(3)确认的密码套件列表,如RSA加密算法
(4)服务器的数字证书
3。客户端响应
在接收到服务器的响应后,客户端首先通过浏览器或操作系统中的CA公钥确认服务器的数字证书的真实性
如果证书没有问题,客户端将从数字证书中取出服务器的公钥,然后用它来加密消息并将以下信息发送给服务器:
(1)一个随机数(主密钥前)随机数由服务器的公钥加密
(2)加密通信算法更改通知,指示后续信息将使用“会话密钥”加密
(3)客户端握手结束通知,表示客户端握手阶段结束此项还总结了服务器要验证的所有以前事件的数据。上面第1项
中的随机数是整个握手阶段的第三个随机数,因此服务器和客户端同时拥有三个随机数,然后使用双方协商的加密算法分别生成该通信的“会话密钥”。
4。服务器的最终响应
在从客户端接收到第三个随机数(预主密钥)后,服务器通过协商的加密算法计算该通信的“会话密钥”然后,将最后一条消息发送给客户端:
(1)加密通信算法更改通知,这意味着所有后续消息都将使用“会话密钥”进行加密
(2)服务器握手结束通知,表示服务器握手阶段已经结束此项还总结了所有以前事件的数据,以供客户验证。
至此,整个SSL/TLS握手阶段已经结束。接下来,当客户端和服务器进入加密通信时,它们使用普通的HTTP协议,但只使用“会话密钥”加密内容
HTTP/1.1、HTTP/2、HTTP/3演进
HTTP/1.1比HTTP/1.0提高了什么性能?
HTTP/1.1性能比HTTP/1.0提高:
使用TCP长连接来提高由HTTP/1.0短连接引起的性能开销
支持管道网络传输。只要发出第一个请求,就可以发出第二个请求,而无需等待它返回,从而减少了总体响应时间。
,但是HTTP/1.1仍然有一个性能瓶颈:
请求/响应标头是以未压缩的方式发送的,标头信息越多,延迟越大。只能压缩身体部分;
发送长标头每次发送相同的报头会导致更多的浪费。
服务器根据请求顺序进行响应。如果服务器响应缓慢,它将导致客户端始终无法请求数据,这意味着队列头被阻塞。
不请求优先级控制;
请求只能从客户端启动,服务器只能被动响应高于
的HTTP/1.1的性能瓶颈,HTTP/2做了什么优化?
HTTP/2协议基于HTTPS协议,因此HTTP/2的安全性也得到保证。与HTTP/1.1:
1相比,
HTTP/2的性能有所提高。标头压缩
HTTP/2压缩标头。如果您同时发出多个请求,并且它们的标题相同或相似,那么该协议将帮助您消除重复点。
这就是所谓的HPACK算法:同时,客户端和服务器维护一个头信息表,所有的字段都将存储在这个表中以生成一个索引号,然后相同的字段将不会被发送,只有索引号会被发送,从而提高了速度。
2。二进制格式
HTTP/2不再像HTTP/1.1中的纯文本消息,而是完全采用二进制格式
报头信息和数据体是二进制的,统称为帧:报头信息帧和数据帧
消息不同于
。虽然它对人不友好,但对计算机非常友好,因为计算机只懂二进制。收到消息后,他们不需要将纯文本消息转换成二进制消息,而是直接分析二进制消息,提高了数据传输的效率。
3。数据流
HTTP/2数据包没有按顺序发送。同一连接中的连续数据包可能属于不同的响应。因此,必须对数据包进行标记,以表明它属于哪个响应。
每个请求或响应的所有数据包都称为流
每个数据流都标有一个唯一的数字,表示客户端发送的数据流数量为奇数,服务器发送的数据流数量为偶数。客户端还可以指定数据流的优先级对于高优先级的请求,服务器首先响应请求
HTTP/1 ~ HTTP/2
4。多路复用
HTTP/2允许多个请求或响应在一个连接中并发,而无需一一对应
删除了HTTP/1.1中的串行请求,不需要排队等待,不会有“队列头阻塞”的问题,从而减少了延迟,大大提高了连接的利用率。
,例如,在一个TCP连接中,服务器从客户端A和B接收两个请求。如果它发现A进程非常耗时,它将响应A请求的已处理部分,然后响应B请求,并在完成后响应A请求的其余部分。
多路复用
5。服务器推送
HTTP/2也在一定程度上改进了传统的“请求-响应”工作模式。该服务不仅可以被动响应,还可以主动向客户端发送消息例如,
,当浏览器第一次请求HTML时,它发送静态资源,如JS和CSS文件,这些资源可以预先用于客户端,以减少延迟的等待,这称为服务器推送(也称为缓存推送)
HTTP/2有什么缺陷?HTTP/3做了哪些优化?
HTTP/2的主要问题是多个HTTP请求正在多路复用一个TCP连接,并且底层TCP协议不知道有多少个HTTP请求。
,因此一旦发生数据包丢失,就会触发TCP重新传输机制,因此TCP连接中的所有HTTP请求都必须等待丢失的数据包重新传输回来。如果请求在
HTTP/1.1中的管道传输中被阻止,则队列后面的所有请求都将被阻止。
HTTP/2多个请求多路复用一个TCP连接,一旦数据包丢失,住宅中的所有HTTP请求都将被阻止。
这都是基于TCP传输层的,所以HTTP/3把HTTP下的TCP协议改成了UDP!
HTTP/1 ~ HTTP/3
UDP的发生与序列和数据包丢失无关,因此不会出现队列头阻塞的HTTP/1.1和重传一个数据包丢失的HTTP/2。
众所周知,UDP是不可靠的,但基于UDP的QUIC协议可以实现类似TCP的可靠传输
QUIC有自己的机制来确保传输的可靠性当某个流丢失数据包时,它只会阻塞该流,其他流不会受到影响。
TL3已升级到最新版本1.3,标头压缩算法也已升级到QPack
HTTPS需要6次交互来建立连接,首先建立三次握手,然后是TLS/1.3三次握手QUIC将TCP和TLS/1.3之前的6次交互直接合并为3次,减少了交互次数
HTTPS传输控制协议(TLS/1.3)和快速传输控制协议
。因此,quic是一种基于UDP的伪TCP+TLS+HTTP/2复用协议
QUIC是一个新协议。对于许多网络设备来说,你根本不知道QUIC是什么。它只会被视为UDP,这将导致新的问题。因此,现在HTTP/3的普及非常缓慢,我不知道UDP将来是否能攻击TCP。
唠叨
近30张图片,全部是从一条线和两条线画出来的,灰色往往很难画,深感画画也是一种体力活动!
爱偷懒我不是真的爱画画,但是为了让大家更好的理解,经过无数次的自我奋斗,我已经走上了一条耗时耗力的画画之路,希望能对大家有所帮助!
不容易创建,也不容易绘图。每个人的“三个联系”是小林创造的最大支持和动力。下次见!
参考文献:
[1]上野轩。带插图的HTTP。人民邮电出版社。
[2]罗剑锋。透视HTTP协议。极客时代。
[3]陈皓。超文本传输协议的过去和现在。酷壳酷壳。
HTTPS://CoolShell。阮一峰。HTTP协议简介。阮一峰的博客。
Yifeng.com/blog/2016/08/http.html
金、银、银四大招聘季节,你还有什么其他文章要采访的干货吗?在
http://blog . csdn . net/blog dev team/article/details/104691837
上共享或查看干货文章本文由 在线网速测试 整理编辑,转载请注明出处。