当然上述所说的特点是基于HTTP/1.1版本来说的;
这是HTTP中最为突出的优点,【简单、灵活、易于扩展】;
【灵活】和【易于扩展】这两个特点之间是相辅相成的,因为灵活让HTTP协议变得易于扩展;
反之,因为易于扩展让HTTP协议变得更加灵活;
该特点体现在,HTTP协议中的请求方法、状态码、头字段等信息没有被写死,我们开发人员可以任意定制、扩充或者解释;
同时这个特点有点像设计模式中的【策略模式】,就是HTTP的上层协议的语义没变,具体的下层协议没有限制,可以使用TCP,还可以使用SSL/TLS,甚至是UDP的QUIC;
这也是HTTP协议里另一大优点【应用广泛】;
从简单Web页面到复杂的JSON数据;从PC上的浏览器到手机上的APP,这些地方都在使用HTTP;
从应用领域到开发领域HTTP协议也都得到了广泛的支持;HTTP协议不局限于某一种开发语言或者操作系统,使其也具有了【跨语言、跨平台】的特性;
这个特性对HTTP来说既是优点也是缺点,是一把【双刃剑】
我们上文介绍过,无状态就好比是服务器没有记忆能力,就不需要存储额外的状态信息。这样能减轻服务器的负担,同时能把更多的资源用于对外的服务上;
无状态就意味着服务器都是相同的,可以容易组层集群,通过负载均衡把请求转发到任意一台服务器上,不会因为状态不一致导致处理出错;
针对【无状态】就不会记录客户端的信息,需要身份校验的连续操作,服务器是不知道这些请求的关联,每次都得问一遍身份信息;
HTTP协议理想态是既能【无状态】又能【有状态】不过这样的好事在Cookie技术上得到实现了;
明文传输也是HTTP协议中一把双刃剑;
明文准确的说:协议里传输的报文【header】部分不使用二进制数据,使用的是简单客阅读的文本形式;
HTTP的明文传输,我们可以用浏览器、Charles、Wireshark这样的工具抓包后,可以肉眼容易地查看或者修改,我们开发工作带来了很大的便利;
HTTP报文信息都暴露光天化日之下,在漫长的传输链路上毫无隐私可言;
明文传输只是【机密】方面的一个缺点,在【身份认证】和【完整性校验】这方面HTTP有所欠缺;
HTTPS的出现就是为了解决这个不安全问题;
简单来说就是怎么证明是你,在虚拟网络中HTTP没有提供有效的手段来确认通信双方的真实身份;
不支持该特性,数据在传输过程中很容易被篡改而无法验证真伪;
HTTP的性能 不算差也不够好;
HTTP协议是基于TCP/IP协议的,并且使用了【请求-应答】的通信模式
TCP协议的性能是不差的,能够应付大多数场景;
江湖不再是以前的江湖,现在互联网是【高并发】,不能保证稳定的连接质量,在TCP基础上HTTP协议有时候会表现的不够好;
同时【请求-应答】模式加剧了HTTP性能问题,会出现【对头阻塞】,当顺序发送的请求序列中有一个请求因为某种原因阻塞时,其他在排队的就一直被阻塞了;
不够该问题在HTTP/2和HTTP/3中都得以解决了;后面再说;
1. 吞吐率吞吐率,单位时间里服务器处理的最大请求数,单位req/s
从服务器角度,实际并发用户数的可以理解为服务器当前维护的代表不同用户的文件描述符总数,也就是并发连接数。服务器一般会限制同时服务的最多用户数,比如apache的MaxClents参数。
这里再深入一下,对于服务器来说,服务器希望支持高吞吐率,对于用户来说,用户只希望等待最少的时间,显然,双方不能满足,所以双方利益的平衡点,就是我们希望的最大并发用户数。
2. 压力测试
有一个原理一定要先搞清楚,假如100个用户同时向服务器分别进行10个请求,与1个用户向服务器连续进行1000次请求,对服务器的压力是一样吗?实际上是不一样的,因对每一个用户,连续发送请求实际上是指发送一个请求并接收到响应数据后再发送下一个请求。这样对于1个用户向服务器连续进行1000次请求, 任何时刻服务器的网卡接收缓冲区中只有1个请求,而对于100个用户同时向服务器分别进行10个请求,服务器的网卡接收缓冲区最多有100个等待处理的请求,显然这时的服务器压力更大。
只听说过影响网站性能的,没听说基本不影响的,影响的如下:
影响HTTP性能的常见因素
我们这里讨论HTTP性能是建立在一个最简单模型之上就是单台服务器的HTTP性能,当然对于大规模负载均衡集群也适用毕竟这种集群也是由多个HTTTP服务器的个体所组成。另外我们也排除客户端或者服务器本身负载过高或者HTTP协议实现的软件使用不同的IO模型,另外我们也忽略DNS解析过程和web应用程序开发本身的缺陷。
从TCP/IP模型来看,HTTP下层就是TCP层,所以HTTP的性能很大程度上取决于TCP性能,当然如果是HTTPS的就还要加上TLS/SSL层,不过可以肯定的是HTTPS性能肯定比HTTP要差,其通讯过程这里都不多说总之层数越多性能损耗就越严重。
在上述条件下,最常见的影响HTTP性能的包括:
TCP连接建立,也就是三次握手阶段
TCP慢启动
TCP延迟确认
Nagle算法
TIME_WAIT积累与端口耗尽
服务端端口耗尽
服务端HTTP进程打开文件数量达到最大
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)