HTTP的特点

news2024/11/16 4:29:20

灵活可扩展
HTTP 协议最初诞生的时候就比较简单,本着开放的精神只规定了报文的基本格式,比如用空格分隔单词,用换行分隔字段,“header+body”等,报文里的各个组成部分都没有做严格的语法语义限制,可以由开发者任意定制。

在随后的发展过程中,HTTP又增加了请求方法、版本号、状态码、头字段等特性。而 body 也不再限于文本形式的 TXT 或 HTML,而是能够传输图片、音频视频等任意数据,这些都是源于它的“灵活可扩展”的特点。

可靠传输
这个特点显而易见,因为 HTTP 协议是基于 TCP/IP 的,而 TCP 本身是一个“可靠”的传输协议,所以 HTTP 自然也就继承了这个特性,能够在请求方和应答方之间“可靠”地传输数据。

它的具体做法与 TCP/UDP 差不多,都是对实际传输的数据(entity)做了一层包装,加上一个头,然后调用 Socket API,通过 TCP/IP 协议栈发送或者接收。

应用层协议
在 TCP/IP 诞生后的几十年里,虽然出现了许多的应用层协议,但它们都仅关注很小的应用领域,局限在很少的应用场景。例如 FTP 只能传输文件、SMTP 只能发送邮件、SSH 只能远程登录等,在通用的数据传输方面“完全不能打”。

所以 HTTP 凭借着可携带任意头字段和实体数据的报文结构,以及连接控制、缓存代理等方便易用的特性,一出现就“技压群雄”,迅速成为了应用层里的“明星”协议。只要不太苛求性能,HTTP 几乎可以传递一切东西,满足各种需求,称得上是一个“万能”的协议。

请求 - 应答
这个请求 - 应答模式是 HTTP 协议最根本的通信模型,通俗来讲就是“一发一收”“有来有去”,就像是写代码时的函数调用,只要填好请求头里的字段,“调用”后就会收到答复。

请求 - 应答模式也明确了 HTTP 协议里通信双方的定位,永远是请求方先发起连接和请求,是主动的,而应答方只有在收到请求后才能答复,是被动的,如果没有请求时不会有任何动作。

此外,请求 - 应答模式也完全符合 RPC(Remote Procedure Call)的工作模式,可以把 HTTP 请求处理封装成远程函数调用,导致了 WebService、RESTful 和 gRPC 等的出现。

无状态
这个所谓的“状态”应该怎么理解呢?“状态”其实就是客户端或者服务器里保存的一些数据或者标志,记录了通信过程中的一些变化信息。

你一定知道,TCP 协议是有状态的,一开始处于 CLOSED 状态,连接成功后是 ESTABLISHED 状态,断开连接后是 FIN-WAIT 状态,最后又是 CLOSED 状态。

这些“状态”就需要 TCP 在内部用一些数据结构去维护,可以简单地想象成是个标志量,标记当前所处的状态,例如 0 是 CLOSED,2 是 ESTABLISHED 等等。

再来看 HTTP,那么对比一下 TCP 就看出来了,在整个协议里没有规定任何的“状态”,客户端和服务器永远是处在一种“无知”的状态。建立连接前两者互不知情,每次收发的报文也都是互相独立的,没有任何的联系。收发报文也不会对客户端或服务器产生任何影响,连接后也不会要求保存任何信息。

“无状态”形象地来说就是“没有记忆能力”。比如,浏览器发了一个请求,说“我是小明,请给我 A 文件。”,服务器收到报文后就会检查一下权限,看小明确实可以访问 A 文件,于是把文件发回给浏览器。接着浏览器还想要 B 文件,但服务器不会记录刚才的请求状态,不知道第二个请求和第一个请求是同一个浏览器发来的,所以浏览器必须还得重复一次自己的身份才行:“我是刚才的小明,请再给我 B 文件。”

我们可以再对比一下 UDP 协议,不过它是无连接也无状态的,顺序发包乱序收包,数据包发出去后就不管了,收到后也不会顺序整理。而 HTTP 是有连接无状态,顺序发包顺序收包,按照收发的顺序管理报文。

但不要忘了 HTTP 是“灵活可扩展”的,虽然标准里没有规定“状态”,但完全能够在协议的框架里给它“打个补丁”,增加这个特性。
其他特点
除了以上的五大特点,其实 HTTP 协议还可以列出非常多的特点,例如传输的实体数据可缓存可压缩、可分段获取数据、支持身份认证、支持国际化语言等。但这些并不能算是 HTTP 的基本特点,因为这都是由第一个“灵活可扩展”的特点所衍生出来的。请添加图片描述

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

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

相关文章

大厂面试NLP工程师,会考察你哪些方面的能力?

你好,我是周磊。 相信你已经知道,一名AI算法工程师,不但需要基础能力扎实,更要具备良好的工程落地能力。那在NLP工程师面试的时候,你知道面试官会从哪些维度去考察你这两方面的能力吗? 今天我就结合我的一…

一种用于大坝水库边坡内部振弦式应变计组

1用途 多向应变计组适用于长期埋设在水工结构物或其它混凝土结构物内,测量结构物内部各个方向上的应变量,并可同步测量埋设点的温度。 应变计按方向和支数安装在应变计安装支座上,组成多向应变计组,用于测量大体积混凝土中各方向…

SpringCloud------热部署(三)

SpringCloud------热部署(三) Devtools是热部署插件,引入热部署实现高效自测。 步骤: 1.Adding devtools to your project 2.Adding plugin to your project 3.Enabling automatic build 4.Update the value of 点击 ctrlshiftal…

大型互联网企业大流量高并发电商领域核心项目已上线(完整流程+项目白皮书)

说在前面的话 面对近年来网络的飞速发展,大家已经都习惯了网络购物,从而出现了一些衍生品例如:某宝/某东/拼夕夕等大型网站以及购物APP~ 并且从而导致很多大型互联网企业以及中小厂都需要有完整的项目经验,以及优秀处理超大流量…

Mysql数据库迁移|如何把一台服务器的mysql数据库迁移到另一台服务器上的myql中

前言 那么这里博主先安利一下一些干货满满的专栏啦! Linux专栏https://blog.csdn.net/yu_cblog/category_11786077.html?spm1001.2014.3001.5482操作系统专栏https://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482手撕数据结构https:/…

为什么要进行数据决策?数据决策对企业而言有何重要意义?

“大数据”几乎已成为时下最时髦的词汇,不夸张地说,当今各行各业无不对大数据充满了向往,希望自己在新一轮的大数据营销中抢占先机。同时,从大数据中引申出的数据挖掘、数据分析、数据安全等数据运用技术也成为人们热捧的焦点。 …

PMP课堂模拟题目及解析(第2期)

11. 涉及一家全球公司 10 家分公司的项目即将完成,项目经理正在安排召开一次经验教训总结会议,项目经理应该邀请谁来参加会议? A. 所有干系人 B. 项目经理的业务部门主管 C. 项目团队的所有成员 D. 高级管理层 12. 收集完有关项目的…

C++标准库 --- 动态内存 (Primer C++ 第五版 · 阅读笔记)

C标准库 --动态内存 (Primer C 第五版 阅读笔记) 第12章 动态内存------(持续更新)12.1、动态内存与智能指针12.1.1、shared_ptr类12.1.2、直接管理内存12.1.3、shared_ptr和new结合使用12.1.4、智能指针和异常12.1.5、unique_ptr12.1.6、weak_ptr 12.2、动态数组1…

刷题记录2

文章目录 题目一分析题解 题目二分析题解 题目一 牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列…

小林coding——图解系统

文章目录 硬件结构CPU是如何执行程序的?磁盘比内存慢几万倍?如何写出让CPU跑得更快的代码?CPU缓存一致性 操作系统结构Linux内核 VS Winodws内核 内存管理为什么要有虚拟内存?malloc是如何分配内存的?内存满了&#xf…

Python 中 随机数 random库 学习与使用

python中的随机数应用大体包含,随机整数、随机浮点数 和 获取随机数序列三类。 一. 随机整数 1.1 随机整数,包含上下限(闭区间) randint(a, b):随机选取 [a, b] 之间的一个整数,随机整数包含a 和 b&#…

mybatis配置参数

一、基础配置 1. 连接数据库 spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/cscardata?useUnicodetrue&characterEncodingUTF-8&serverTimezoneGMT%2B8username: rootpassword: roottype: com.alibaba.druid.poo…

公开景区监控——缓解交通拥堵,优化出行体验

阚昊宇 XXXXXXXXXXXXX 1 引言 随着疫情时代过去,旅游需求不断增长,节假日热点景区的人流量持续攀高。在节假日调休机制的共同影响下,旅游景区内人群密度不断增加。5月3日,携程发布的《2023年五一出游数据报告》显示,…

15天学习MySQL计划-主从复制(运维篇)第十三天

15天学习MySQL计划-主从复制(运维篇)第十三天 主从复制 1.概述 ​ 主从复制是指主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫做重做),从而使得从库和主库…

计算机操作系统实验:银行家算法模拟

目录 前言实验目的实验内容实验原理实验过程代码如下代码详解算法过程运行结果 总结 前言 本文是计算机操作系统实验的一部分,主要介绍了银行家算法的原理和实现。银行家算法是一种用于解决多个进程对多种资源的竞争和分配的算法,它可以避免死锁和资源浪…

写作业用白光还是暖光?盘点色温4000K的护眼台灯

台灯的白光或者暖光指的是台灯的色温,低色温的光线看起来发黄发红,高色温的光线发白发蓝。 如果灯光的光源是高品质光源,本身没有蓝光问题,那么色温的选择对护眼的影响是比较少的,更多的是对人学习工作状态&#xff0c…

TIM-编码器—STM32

TIM-编码器—STM32 EncoderInterface 编码器接口 编码器接口可接收增量(正交) 编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度 每个高级定时器和通用定时器都拥有1个编码器…

transformer在计算机视觉中的应用

Transformer 在计算机视觉中的应用 论文地址: https://arxiv.org/abs/1706.03762 Vision Transformer An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 代码地址: https://github.com/google-research/vision_transfor…

总结840

学习目标: 5月(完成张宇强化18讲,背诵25篇短文,熟词僻义300词基础词) 每日必复习(5分钟) 看了进步本中的一道数列题 学习内容: 暴力英语:继续艾玛沃特森的演讲&#…

Winsw实现springboot的jar包的windows服务,实现开机自启动

在windows上运行Springboot打包jar,如何后台运行及注册成Windows服务? 一、确认.NET Framework版本 1、在地址栏上输入“C:\Windows\Microsoft.NET\Framework”,按回车键 2、可以看到.NET Framework版本。可以看到最高版本为4.0 二、winsw &…