应用层面试题

HTTP头部包含哪些信息

典型的请求消息:
在这里插入图片描述
在这里插入图片描述
典型的响应消息
在这里插入图片描述
在这里插入图片描述

Keep-Alive和非Keep-Alive区别,对服务器性能有影响吗

在http早期,每个http请求都要求打开一个tpc socket连接,并且使用一次之后就断开这个tcp连接。

使用keep-alive可以改善这种状态,即在一次TCP连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制,它减少了tcp连接建立次数,也意味着可以减少Time_Wait状态连接,因此提高性能和提高httpd服务器的吞吐率。

但是,keep-alive它不是免费的午餐,长时间的tcp连接很容易导致系统资源无效的占用。配置不当的keep-alive,会比重复利用连接带来的损失更大。所以,正确地设置keep-alive timeout时间非常重要。

keepalvie timeout
Httpd守护进程,一般都提供了keep-alive timeout时间设置参数。比如nginx的keepalive_timeout,和Apache的KeepAliveTimeout。这个keepalive_timout时间值意味着:一个http产生的tcp连接在传送完最后一个响应后,还需要hold住keepalive_timeout秒后,才开始关闭这个连接。

httpd守护进程发送完一个响应后,理应马上主动关闭相应的tcp连接。当设置 keepalive_timeout后,httpd守护进程会想说:”等一下浏览器吧,看看有没有请求过来”,这一等,便是keepalive_timeout时间。如果守护进程在这个等待的时间里,一直没有收到浏览发过来http请求,则关闭这个http连接。

HTTP长连接短连接使用场景是什么

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。
像一些京东,淘宝等大型的网站一般用短连接
像QQ,网络游戏等即时通讯一般用长连接

怎么知道HTTP的报文长度

一般使用Content-Length表示body报文体的长度,这样往后截取即可获得整个报文
在进行chunked编码传输时,在回复消息的头部有Transfer-Encoding: chunked

HTTP方法了解哪些

GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
OPTIONS:查询相应URI支持的HTTP方法。

GET和POST的区别

区别一:
get重点在从服务器上获取资源,post重点在向服务器发送数据,会把提交的数据放在HTTP的请求体里;
区别二:
Get传输的数据量小,因为受URL长度限制,但效率较高;
Post可以传输大量数据,所以上传文件时只能用Post方式;
区别四:
get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;
post较get安全性较高;

GET的长度限制是多少

IE6.0 : url最大长度2083个字符,超过最大长度后无法提交。
IE7.0 : url最大长度2083个字符,超过最大长度后仍然能提交,但是只能传过去2083个字符。
IE8.0 : url最大长度4076个字符,超过该长度会自动忽略后面的内容.
firefox 3.0.3 : url最大长度7764个字符,超过最大长度后无法提交。
Opera 9.52 : url最大长度7648个字符,超过最大长度后无法提交。
Google Chrome 2.0.168 : url最大长度7713个字符,超过最大长度后无法提交。

HTTP 与 HTTPs 的工作方式【建立连接的过程】

HTTP
搭建TCP客户端以及服务端程序,并且建立连接。(80端口)
客户端组织HTTP协议格式请求数据,向服务端提出请求。
服务端接收请求,并按照HTTP协议格式对请求进行解析,并根据请求进行业务处理。
服务端业务处理完毕后,按照HTTP协议格式组织HTTP响应数据,向客户端进行响应。
其通信内容以明文的方式发送,不通过任何方式的数据加密
HTTPs
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)是以安全为目标的 HTTP 协议,在 HTTP 的基础上通过传输加密和身份认证的方式保证了传输过程的安全性。
1、SSL协议是什么,如何实现安全传输的大致说明

SSL是安全套接字协议,建立在可靠的传输协议(如TCP)之上,在TCP建立连接之后,实际数据传输之前,通讯双方通过身份认证以及加密传输实现整体的安全传输。

2、其中实现安全传输的过程的分步表达

服务器通过非对称加密算法生成一对秘钥(公钥与私钥),拿着公钥去权威机构生成CA证书,证书中包含自己的机构信息以及权威机构信息,以及证书的有效期,以及公钥信息等

在tcp建立连接后,服务器首先将自己在权威机构颁发的证书发送给客户端

客户端收到证书后,解析得到机构信息以及公钥信息,然后去自己信任的权威机构对当前服务器进行身份验证,通过则通信继续,否则可以选择中断通信或者忽略检测

拿着证书中的公钥加密自己要发送给服务端的数据,数据中包含自己支持的对称加密算法列表以及一个随机数

服务端收到客户端的公钥加密数据后,使用私钥进行解密,得到对方的对称算法列表和随机数,然后给客户端也回复一个随机数

双方通过自己与对方的随机数以及算法列表计算最终得到一个对称加密算法进行加密实际的数据传输。
-------------------------------------------------------------------------------
CA认证,即电子认证服务,是指为电子签名相关各方提供真实性、可靠性验证的活动。

证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任

HTTP和HTTPs的区别

HTTPS和HTTP的区别主要如下:

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

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

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

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

HTTPs的加密方式

服务器用明文的方式给客户端发送自己的公钥,客户端收到公钥之后,会生成一把密钥(对称加密用的),然后用服务器的公钥对这把密钥进行加密,之后再把密钥传输给服务器,服务器收到之后进行解密,最后服务器就可以安全得到这把密钥了,而客户端也有同样一把密钥,他们就可以进行对称加密了。

客户端为什么信任第三方证书

因为传输安全要建立SSL连接,客户端要对服务端做身份验证,如果不通过,就不会建立SSL连接。
这是SSL连接的规范。当然在同一个Windows域里,使用NetTcpBinding 是不需要证书的。

HTTP是不保存状态的协议,如何保存用户状态

HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。
HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管理状态了。
Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。Cookies是当你浏览某网站时,由Web服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息。

状态码

HTTP状态码表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常或者是出现的错误,能够根据返回的状态码判断请求是否得到正确的处理很重要。
在这里插入图片描述

HTTP/1.1和HTTP/1.0的区别

缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

错误通知的管理,在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

Host头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

长连接,HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

HTTP/1.X和HTTP/2.0的区别

多路复用
HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。

头部数据压缩
在HTTP1.1中,HTTP请求和响应都是由状态行、请求/响应头部、消息主体三部分组成。一般而言,消息主体都会经过gzip压缩,或者本身传输的就是压缩过后的二进制文件,但状态行和头部却没有经过任何压缩,直接以纯文本传输。随着Web功能越来越复杂,每个页面产生的请求数也越来越多,导致消耗在头部的流量越来越多,尤其是每次都要传输UserAgent、Cookie这类不会频繁变动的内容,完全是一种浪费。
HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。

服务器推送
服务端推送是一种在客户端请求之前发送数据的机制。网页使用了许多资源:HTML、样式表、脚本、图片等等。在HTTP1.1中这些资源每一个都必须明确地请求。这是一个很慢的过程。浏览器从获取HTML开始,然后在它解析和评估页面的时候,增量地获取更多的资源。因为服务器必须等待浏览器做每一个请求,网络经常是空闲的和未充分使用的。

为了改善延迟,HTTP2.0引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前,免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以直接从本地加载这些资源,不用再通过网络。

HTTP/3了解吗

DNS的作用和原理

作用:它所提供的服务是用来将域名转换为IP地址的工作
在这里插入图片描述

假定域名为m.xyz.com的主机想知道另一个主机y.abc.com的IP地址。例如,主机m.xyz.com打算发送邮件给y.abc.com。这时就必须知道主机y.abc.com的IP地址。下面是上图a的几个查询步骤:
1、主机m.abc.com先向本地服务器dns.xyz.com进行递归查询。
2、本地服务器采用迭代查询。它先向一个根域名服务器查询。
3、根域名服务器告诉本地服务器,下一次应查询的顶级域名服务器dns.com的IP地址。
4、本地域名服务器向顶级域名服务器dns.com进行查询。
5、顶级域名服务器dns.com告诉本地域名服务器,下一步应查询的权限服务器dns.abc.com的IP地址。
6、本地域名服务器向权限域名服务器dns.abc.com进行查询。
7、权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。
8、本地域名服务器最后把查询结果告诉m.xyz.com。
整个查询过程共用到了8个UDP报文。

DNS为什么用UDP

udp适用于小包,无上下文的情况,好处是开销小。很容易理解,udp查询就是一问一答,url和ip地址都是很短的字符串,都不会超过一个包。

怎么实现DNS劫持

socket()套接字有哪些

socket函数 bind函数 listen函数 accept函数 connet函数

URI(统一资源标识符)和URL(统一资源定位符)之间的区别

URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。
Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的
URI一般由三部组成:
①访问资源的命名机制
②存放资源的主机名
③资源自身的名称,由路径表示,着重强调于资源。

URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。
采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部组成:
①协议(或称为服务方式)
②存有该资源的主机IP地址(有时也包括端口号)
③主机资源的具体地址。如目录和文件名等
URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。

为什么fidder,charles能抓住你的包(抓取数据包的过程)

如果你访问一个网站很慢,怎么排查和解决

其他协议

网站解析全过程

在这里插入图片描述
① DNS 解析:当用户输入一个网址并按下回车键的时候,浏览器获得一个域名,而在实际通信过程中,我们需要的是一个 IP 地址,因此我们需要先把域名转换成相应 IP 地址。【具体细节参看问题 16,17】

② TCP 连接:浏览器通过 DNS 获取到 Web 服务器真正的 IP 地址后,便向 Web 服务器发起 TCP 连接请求,通过 TCP 三次握手建立好连接后,浏览器便可以将 HTTP 请求数据发送给服务器了。【三次握手放在传输层详细讲解】

③ 发送 HTTP 请求:浏览器向 Web 服务器发起一个 HTTP 请求,HTTP 协议是建立在 TCP 协议之上的应用层协议,其本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页的请求。

④ 处理请求并返回:服务器获取到客户端的 HTTP 请求后,会根据 HTTP 请求中的内容来决定如何获取相应的文件,并将文件发送给浏览器。

⑤ 浏览器渲染:浏览器根据响应开始显示页面,首先解析 HTML 文件构建 DOM 树,然后解析 CSS 文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。

⑥ 断开连接:客户端和服务器通过四次挥手终止 TCP 连接。【其中的细节放在传输层详细讲解】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值