计算机网络之Http协议

计算机网络之Http协议

1.传输协议

在这里插入图片描述

2.Http协议

HTTP 协议一般指 HTTP(超文本传输协议):
超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准
是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)

HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。

3.Http协议特点

在这里插入图片描述

4.Http和Https的区别

HTTP,即超文本传输协议,是一个基于 TCP/IP 通信协议:
会存在这几个问题:
1)请求信息是明文传输,容易被窃听截取。
2)没有验证对方身份,存在被冒充的风险
3)数据的完整性未校验,容易被中间人篡改
为了解决 Http 存在的问题,Https 出现啦。
Https 是什么?
HTTPS= HTTP+SSL/TLS,可以理解 Https 是身披 SSL(Secure Socket Layer,安全套接层) 的 HTTP。

Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。二者之间存在如下不同:
1.端口不同:Http与Https使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
2.资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
3.证书开销:
Https通信需要证书,而证书一般需要向认证机构购买;
Http通信不需要证书
4.安全性:http不安全,https安全
5.报文加密方面:
Https使用密文,Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制;
Http使用明文

5.HTTP工作原理

image-20220206145726807

6.HTTP1.0,1.1,2.0 的版本区别

思路:这道题主要考察的知识点是HTTP 几个版本的区别,我们记住HTTP/1.0默认是短连接,可以强制开启;HTTP/1.1 默认长连接,HTTP/2.0 采用多路复用就差不多啦。

6.1HTTP1.0

HTTP/1.0 详细介绍
1996年5月,HTTP/1.0 版本发布,为了提高系统的效率,HTTP/1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。
这种方式就好像我们打电话的时候,只能说一件事儿一样,说完之后就要挂断,想要说另外一件事儿的时候就要重新拨打电话。
HTTP/1.0中浏览器与服务器只保持短暂的连接,连接无法复用。也就是说每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。
我们知道TCP连接的建立需要三次握手,是很耗费时间的一个过程。所以,HTTP/1.0版本的性能比较差。
HTTP1.0 其实也可以强制开启长链接,例如接受Connection: keep-alive 这个字段,但是,这不是标准字段,不同实现的行为可能不一致,因此不是根本的解决办法。

HTTP/1.0 精简介绍:
1)默认使用短连接,每次请求都需要建立 TCP 连接。服务完成立即断开,开销大;
2)错误状态响应码少;
3)不支持断点续传。它可以设置Connection: keep-alive 这个字段,强制开启长连接。

6.2HTTP1.1

HTTP/1.1 详细介绍:
为了解决HTTP/1.0存在的缺陷,HTTP/1.1于1999年诞生。相比较于HTTP/1.0来说,最主要的改进就是引入了持久连接。所谓的持久连接即TCP连接默认不关闭,可以被多个请求复用
由于之前打一次电话只能说一件事儿,效率很低。后来人们提出一种想法,就是电话打完之后,先不直接挂断,而是持续一小段时间,这一小段时间内,如果还有事情沟通可以再次进行沟通。
客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。或者客户端在最后一个请求时,主动告诉服务端要关闭连接。
HTTP/1.1版还引入了管道机制(pipelining),即在同一个TCP连接里面,客户端可以同时发送多个请求。这样就进一步改进了HTTP协议的效率。
有了持久连接和管道,大大的提升了HTTP的效率。但是服务端还是顺序执行的,效率还有提升的空间。

HTTP/1.1 精简介绍
1)默认长连接,即 TCP 连接默认不关闭,可以被多个请求复用。
2)分块传输编码,即服务端每产生一块数据,就发送一块,用”流模式” 取代” 缓存模式
3)管道机制,即在同一个 TCP 连接里面,客户端可以同时发送多个请求。

6.3HTTP2.0

HTTP/2.0 详细介绍:
HTTP/2 是 HTTP 协议自 1999 年 HTTP 1.1 发布后的首个更新,主要基于 SPDY 协议。
HTTP/2 为了解决HTTP/1.1中仍然存在的效率问题,HTTP/2 采用了多路复用。即在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应。能这样做有一个前提,就是HTTP/2进行了二进制分帧,即 HTTP/2 会将所有传输的信息分割为更小的消息和帧(frame),并对它们采用二进制格式的编码。
也就是说,老板可以同时下达多个命令,员工也可以收到了A请求和B请求,于是先回应A请求,结果发现处理过程非常耗时,于是就发送A请求已经处理好的部分, 接着回应B请求,完成后,再发送A请求剩下的部分。A请求的两部分响应在组合到一起发给老板。
而这个负责拆分、组装请求和二进制帧的一层就叫做二进制分帧层。
除此之外,还有一些其他的优化,比如做Header压缩、服务端推送等。
Header压缩就是压缩老板和员工之间的对话。
服务端推送就是员工事先把一些老板可能询问的事情提现发送到老板的手机(缓存)上。这样老板想要知道的时候就可以直接读取短信(缓存)了。
目前,主流的HTTP协议还是HTTP/1.1 和 HTTP/2。并且各大网站的HTTP/2的使用率也在逐年增加。

HTTP/2.0 精简介绍
1)二进制协议, 1.1 版本的头信息是文本(ASCⅡ编码),数据体可以是文本或者二进制;2.0 中,头信息和数据体都是二进制,实现方便,健壮性更好。
2)完全多路复用,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应。
3)报头压缩:HTTP 协议不带有状态,每次请求都必须附上所有信息。Http/2.0 引入了头信息压缩机制,使用gzip或compress 压缩后再发送,同时通信的双方各自缓存一份header fields表,避免了header的重复传输。
4)服务端推送:允许服务器未经请求,主动向客户端发送资源。

7.HTTP的长连接与短连接理解及应用场景

HTTP协议的长连接和短连接,实质上就是TCP协议的长连接和短连接。

在 HTTP/1.0 中默认使用短连接。也就是说,客户端和服务器每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个 HTML 或其他类型的 Web 页中包含有其他的 Web 资源(如:JavaScript 文件、图像文件、CSS 文件等),每遇到这样一个 Web 资源,浏览器就会重新建立一个 HTTP 会话。

而从 HTTP/1.1 起,默认使用长连接,网页打开后,Client和Server间传输数据的TCP连接不会关闭,之后再进行访问就直接用已建立的连接,用以保持连接特性。使用长连接的 HTTP 协议,会在响应头加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。
Keep-Alive 不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如:Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

8.如何理解 HTTP 协议是无状态的

如何理解 HTTP 协议是无状态的
思路: 这道题主要考察候选人,是否理解 Http 协议,它为什么是无状态的呢?如何使它有状态呢?
如何理解无状态这个词呢?
是指服务端对于客户端每次发送的请求都认为它是一个新的请求,对于事务处理没有记忆能力,上一次会话和下一次会话没有联系。不对通信状态进行保存,服务器无法判断用户身份。即打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。服务器不会去记住你是谁,所以是无状态协议;
HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。

HTTP的无状态,指协议,
可以通过一个生活中的例子,来更好理解并记住它:
有状态场景:
·小红:今天吃啥子?
·小明:罗非鱼~
·小红:味道怎么样呀?
·小明:还不错,好香。
无状态的场景:
·小红:今天吃啥子?
·小明:罗非鱼~
·小红:味道怎么样呀?
·小明:?啊?你说啥?什么鬼?什么味道怎么样?
Http 加了 Cookie的话:
·小红:今天吃啥子?
·小明:罗非鱼~
·小红:你今天吃的罗非鱼,味道怎么样呀?
·小明:还不错,好香。

9.在交互过程中如果数据传送完了,还不想断开连接怎么办,怎么维持?

这个问题记住 keep-alive 就好,也就是说,在 HTTP 中响应体的Connection字段指定为 keep-alive 即可

10. HTTP 如何实现长连接?在什么时候会超时?

思路: 这道题实际上是考察 TCP 长连接的知识点,HTTP 的长连接实质是指 TCP 的长连接。至于什么时候超时,我们记住这几个参数如tcp_keepalive_time、tcp_keepalive_probes就好啦

什么是 HTTP 的长连接?
1.HTTP 分为长连接和短连接,本质上说的是 TCP 的长短连接。TCP 连接是一个双向的通道,它是可以保持—段时间不关闭的,因此 TCP 连接才具有真正的长连接和短连接这一说法哈。
2.TCP 长连接可以复用一个 TCP 连接,来发起多次的 HTTP 请求,这样就可以减少资源消耗,比如一次请求HTML,如果是短连接的话,可能还需要请求后续的 JS/CSS。

如何设置长连接?
通过在头部(请求和响应头)设置Connection字段指定为 keep-alive,HTTP/1.0协议支持,但是是默认关闭的,从HTTP/1.1以后,连接默认都是长连接

在什么时候会超时呢?
1)HTTP 一般会有httpd守护进程,里面可以设置keep-alive timeout,当tcp连接闲置超过这个时间就会关闭,也可以在 HTTP 的 header 里面设置超时时间
2)TCP 的keep-alive包含三个参数,支持在系统内核的 net.ipv4 里面设置; 当 TCP 连接之后,闲置了tcp_keepalive_time,则会发生侦测包,如果没有收到对方的ACK,那么会每隔 tcp_keepalive_intvl 再发一次,直到发送了tcp_keepalive_probes,就会丢弃该连接。

  1. tcp_keepalive_intvl = 15
  2. tcp_keepalive_probes = 5
  3. tcp_keepalive_time = 1800

11.Http请求过程与原理

思路: HTTP 请求,非常非常基础,与浏览器输入url到显示主页这道题有点类似。
Http 请求过程
1.客户端进行 DNS 域名解析,得到对应的 IP 地址
2.根据这个 IP,找到对应的服务器建立连接(三次握手)
3.建立 TCP 连接后发起 HTTP 请求(一个完整的 http 请求报文)
4.服务器响应 HTTP 请求,客户端得到 html 代码
5.客户端解析 html 代码,用 html 代码中的资源 (如 js,css,图片等等
6.服务器关闭 TCP 连接(四次挥手)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GoGo在努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值