HTTP/1.1 特性(计算机网络)

news2024/11/26 20:26:26

HTTP/1.1 的优点有哪些?

「简单、灵活和易于扩展、应用广泛和跨平台」

1. 简单

HTTP 基本的报文格式就是 header + body,头部信息也是 key-value 简单文本的形式,易于理解

2. 灵活和易于扩展

HTTP 协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充

同时 HTTP 由于是工作在应用层( OSI 第七层),则它下层可以随意变化,比如:

  • HTTPS 就是在 HTTP 与 TCP 层之间增加了 SSL/TLS 安全传输层;
  • HTTP/1.1 和 HTTP/2.0 传输协议使用的是 TCP 协议,而到了 HTTP/3.0 传输协议改用了 UDP 协议。

3. 应用广泛和跨平台

HTTP/1.1 的缺点有哪些?

HTTP 协议里有优缺点一体的双刃剑,分别是「无状态、明文传输」,同时还有一大缺点「不安全」。

1. 无状态双刃剑

无状态的好处,因为服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担。

无状态的坏处,没有记忆能力,那么在完成有关联性的操作时会非常麻烦。

例如登录->添加购物车->下单->结算->支付,这系列操作都要知道用户的身份才行。但服务器不知道这些请求是有关联的,每次都要问一遍身份信息。

通常使用 Cookie 技术来解决无状态问题。

Cookie 通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。

相当于,在客户端第一次请求后,服务器会下发一个装有客户信息的「小贴纸」,后续客户端请求服务器的时候,带上「小贴纸」,服务器就能认得了

2. 明文传输双刃剑

明文传输虽然易于阅读,但也增加了信息泄露的风险。

HTTP/1.1 的性能如何?

HTTP 协议是基于 TCP/IP,并且使用了「请求 - 应答」的通信模式,所以性能的关键就在这两点里。

1. 长连接

早期 HTTP/1.0 性能上的一个很大的问题,那就是每发起一个请求,都要新建一次 TCP 连接(三次握手),而且是串行请求,做了无谓的 TCP 连接建立和断开,增加了通信开销。

HTTP/1.1 提出了长连接的通信方式,也叫持久连接。这种方式减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。

如果某个 HTTP 长连接超过一定时间没有任何数据交互,服务端就会主动断开这个连接。

2. 管道网络传输

HTTP/1.1 采用了长连接的方式,这使得管道(pipeline)网络传输成为了可能。

即可在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。

举例来说,客户端需要请求两个资源。以前的做法是,在同一个 TCP 连接里面,先发送 A 请求,然后等待服务器做出回应,收到后再发出 B 请求。那么,管道机制则是允许浏览器同时发出 A 请求和 B 请求,如下图:

但是服务器必须按照接收请求的顺序发送对这些管道化请求的响应

如果服务端在处理 A 请求时耗时比较长,那么后续的请求的处理都会被阻塞住,这称为「队头堵塞」。

所以,HTTP/1.1 管道解决了请求的队头阻塞,但是没有解决响应的队头阻塞

注意:

实际上 HTTP/1.1 管道化技术不是默认开启,而且浏览器基本都没有支持,知道有这个功能,但是没有被使用就行了。

3. 队头阻塞

「请求 - 应答」的模式会造成 HTTP 的性能问题。

当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一同被阻塞了,会招致客户端一直请求不到数据,这就是「队头阻塞」,好比上班的路上塞车。

总之 HTTP/1.1 的性能一般,后续的 HTTP/2 和 HTTP/3 就是在优化 HTTP 的性能。

HTTP/1.1采用了长连接来提高性能,只要客户端和服务器端没有一方主动断开连接,就会在一定时间内保持连接,从而避免了多次连接和断开产生的开销,长连接使得管道网络传输成为可能,之前的情况是必须等第一个请求得到响应时才能发送第二个请求,如果使用管道网络传输,那么就可以在发送的第一个请求没有得到响应时就发送第二个请求,但是服务器必须按照接收请求的顺序发送对这些管道化请求的响应,如果服务端在处理某一个请求时耗时比较长,那么后续的请求的处理都会被阻塞住,这称为「队头堵塞」,就和堵车一样,会导致客户端一直请求不到数据。

所以,HTTP/1.1 管道解决了请求的队头阻塞,但是没有解决响应的队头阻塞,不过管道网络传输默认关闭,且大多数浏览器没有支持,知道就行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1558711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 常见性能分析方法论介绍(业务负载画像、下钻分析、USE方法论,检查清单)

写在前面 博文内容为 《BPF Performance Tools》 读书笔记整理内容涉及常用的性能调优方法论介绍:业务负载画像下钻分析USE方法论检查清单理解不足小伙伴帮忙指正 不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼…

基于百度地图实现Android定位功能实现(一)

Android集成百度地图 文章目录 Android集成百度地图前言准备工作创建工程申请密钥 在项目中集成BaiduMap SDK创建地图 前言 本案例使用百度地图实现在Android中集成地图,并且实现了普通地图/卫星地图,以及路况图和热状图功能; 参考技术文档&…

SRS OBS利用RTMP协议实现音视频推拉流;WebRTC 屏幕直播分享工具

一、SRS OBS利用RTMP协议实现音视频推拉流 参考:https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started 1)docker直接运行SRS服务: docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.co…

如何使用固定公网地址远程访问内网Axure RP生成的网站原型web页面

文章目录 前言1.在AxureRP中生成HTML文件2.配置IIS服务3.添加防火墙安全策略4.使用cpolar内网穿透实现公网访问4.1 登录cpolar web ui管理界面4.2 启动website隧道4.3 获取公网URL地址4.4. 公网远程访问内网web站点4.5 配置固定二级子域名公网访问内网web站点4.5.1创建一条固定…

开源翻译大模型

开源翻译大模型 1 简介 在开发过程中,会遇到定制化翻译工具的需要,开源的翻译模型可以解决相应的问题。其中英语转中文的比较好的开源项目有: 序号组织模型地址备注1赫尔辛基大学语言技术研究小组(Language Technology Researc…

debug: 解决typora两侧留白过大问题

问题如下图:解决办法:打开: 文件 -> 偏好设置 -> -> 外观 -> 看主题选择的是哪一个, 我选择的是GitHub * 点击打开主题设置 -> 选择你对应主题的.css文件 -> CTRL cv 备份一份, 然后打开 在文件中找到max-width : 修改对应的值 , 我改成了1920px * 改好以后…

安装即启动?探索流氓App的自启动“黑科技” (Android系统内鬼之ContentProvider篇)

前段时间发现了一个神奇的app,它居然可以在安装之后立即自启动: 看到没有,在提示安装成功大概1到2秒后,就直接弹出Toast和通知了! 好神奇啊,在没有第三方app帮忙唤醒的前提下,它是怎么做到首次安…

谷粒商城——RabbitMQ

0. 消息中间件 1.RabbitMQ的核心概念 2. 工作流程 整体架构: 相关细节: 上述要注意的是: 路由键包含在message的头中,其作用是用于指定该消息存储与哪个消息队列中。 信道是客户端(包括生产者和消费者)用…

WIFI驱动移植实验:WIFI从路由器动态获取IP地址与联网

一. 简介 前面两篇文章,一篇文章实现了WIFI联网前要做的工作,另一篇文章配置了WIFI配置文件,进行了WIFI热点的连接。文章如下: WIFI驱动移植实验:WIFI 联网前的工作-CSDN博客 WIFI驱动移植实验:连接WIF…

Python字符串字母大小写变换,高级Python开发技术

寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ‘’’ demo ‘tHis iS a GOod boOK.’ print(demo.casefold()) print(demo.lower()) print(demo.upper()) print(demo.capitalize()) print(demo.title()) print(dem…

什么是 SSL 证书?

SSL 证书的介绍 SSL(Secure Sockets Layer)证书是一种由数字证书颁发机构(CA)签发的加密证书,用于在 Web 浏览器和服务器之间建立安全连接。SSL 证书能够确保网站和应用程序的数据传输过程中不被窃听、篡改或伪造&…

springboot点餐平台网站

目 录 摘 要 1 前 言 2 第1章 概述 2 1.1 研究背景 3 1.2 研究目的 3 1.3 研究内容 4 第二章 开发技术介绍 5 2.1相关技术 5 2.2 Java技术 6 2.3 MySQL数据库 6 2.4 Tomcat介绍 7 2.5 Spring Boot框架 8 第三章 系统分析 9 3.1 可行性分析 9 3.1.1 技术可行性 9 3.1.2 经济可行…

初始《string》及手搓模拟实现《string》

目录 前言: 为什么学习string类? 标准库中的string类 1. string类对象的常见构造 ​编辑 2. string类对象的容量操作 ​编辑 3. string类对象的访问及遍历操作 4. string类对象的修改操作 5. string类非成员函数 vs和g下string结构的说明 vs下s…

C/C++游戏编程实例-飞翔的小鸟

飞翔的小鸟游戏设计 首先需要包含以下库&#xff1a; #include<stdio.h> #include<windows.h> #include<stdlib.h> //包含system #include<conio.h>设置窗口大小&#xff1a; #define WIDTH 50 #define HEIGHT 16设置鸟的结构&#xff1a; struct …

在线版的超级马里奥 Super Mario HTML5

原本是在csdn资源找个代码学习的&#xff0c;无奈下载了几份都是垃圾代码(下载了几份都是) 废话不多说&#xff0c;直接上干活。代码、音效、图片、样式都包含 <!doctype html> <html> <head> <meta charsetutf-8 /> <title>Super Mario HTML5 …

C语言变量存储属性

在C语言中&#xff0c;变量不仅仅是用来存储数据的容器&#xff0c;还拥有一些额外的存储属性&#xff0c;这些属性决定了变量的生命周期、作用域和存储位置等。本文将介绍C语言中常见的变量存储属性&#xff0c;包括自动存储、静态存储、寄存器存储和外部链接存储&#xff0c;…

吾空笔记本X15降温

低成本搞了个悟空笔记本&#xff0c;其实就是蓝天磨具&#xff0c;跟木叶村&#xff0c;机革一样&#xff0c;只是说机革边角改得多点&#xff0c;这两个基本没改。通病是轻薄本压不住AMD这个U&#xff0c;如果在超频模式&#xff0c;且带高刷屏&#xff0c;GPU加CPU的功耗&…

【Linux】认识线程池 AND 手撕线程池(正常版)

文章目录 0.回顾进程池1.计算机层面的池化技术2.线程池预备知识2.1介绍线程池2.2设计线程池的意义是什么&#xff1f;2.3其他知识 3.回顾C类与对象3.1cpp什么情况下成员函数必须是静态的&#xff1f;3.1可变参数列表3.2格式化输出函数3.3预定义符号 4.图解线程池运作原理4.0完整…

并查集----格子游戏

并查集中最重要的是要搞懂&#xff1a; 不明白的可以拿纸自己先演示一番&#xff0c;find函数不仅能找到他们的祖先数&#xff0c;而且同时也能更新路径的子结点都等于祖先&#xff0c;然后以后寻找时会更加的方便&#xff01;

P3817 小A的糖果(贪心)

思路&#xff1a;真绝了&#xff0c;开了longlong从80分到了100分。因为一个特判st值影响我AC&#xff0c;那个单独的特判竟然有问题。我想的是如果有a[i] a[i1]则将状态值st标为true。最后在输出结果之前先看st的值&#xff0c;如果他为false&#xff0c;则说明没有两盒子的和…