什么是超文本传输协议-超文本传输协议定义

这玩意儿实际上就是电脑之间传信的“公共邮局”,名字听着挺正式,实际上就是个超级大的、不管信还是邮件都强制得把路径一标清楚的公告板。 那会儿咱们在网页上点个链接,浏览器跟那个服务器得想办法聊两句,确定对方是哪位、这东西啥时候能响、信该如何寄出去。
要是是老式的 TCP/IP 协议,它得先跟 TCP 握手,再跟 IPv4 握手,搞半天才让数据包顺着网线飞那会儿。
那时候你敲了个网址,系统得算各种路由表、查内网地址,有时候还得搞三个就连四个阶段的 TCP 三次握手,效率那是相当低,感觉像是在搬桶装水泥,还得一个个搬、调试、确认,中间还得跟邻居打手势。 超文本传输协议(HTTP)的出现,就是为了省这堆费事事。它是个单播的、不知情的协议,就像是一个早已打通了所有基站的大喇叭。当你打开浏览器发个请求,它直接告诉服务器:“嘿,我要东西,我要这东西的静态资源,别问我是哪位,直接放过来就行。”服务器收到后也直接回:“好的,把那个图片文件发给你。”整个过程里,你的浏览器和服务器根本不知道中间经历了啥。TCP 握手变成了握手握手,不再需求那个繁琐的三次握手去确认连接是否建立,也不再需求去解析 IPv4 的地址。HTTP 直接专注于内容本身,不管路径长短、不管中间经过多少层,只管把内容给过来。 不过光有 HTTP 还不够,它还得管着底层的“搬运工人”。HTTP 本身只管“说”,不管“如何跑”。
要是把 HTTP 和 TCP 拆开了,那得把服务器都拆了。HTTP 定义了请求和响应如何打,比如“GET /index.html HTTP/1.1",要么“POST /upload HTTP/1.1"。服务器收到后,还得自己去搞 TCP 握手,自己去跟到达的 TCP 包对话,确保数据包没丢、没乱序,然后才把它们里的二进制数据发出去。
这就是个典型的“分而治之”的架构,HTTP 只负责交差,TCP 负责执行。 既然 HTTP 只管交差,那它如何保证万无一失呢?靠的就是那个效率超高的 API,也就是 TCP 三次握手的变体——四次握手。别看名字里带个“四次”,但出于 HTTP 根本不需求去确认连接是否已经建立,故此它把 TCP 的握手过程砍掉了,只保留了连接建立的一套流程。
这大大缩短了延迟,让数据跑得更快。 目前咱们来扒一扒 HTTP 到底是如何运作、效率到底提升了多少的。 先说最基础的请求流程。当你在浏览器输入一个网址,比如 google.com,浏览器会向服务器发起一个 HTTP 请求。
这次请求会携带一个 Header,也就是“信封”。信封里写满了信息:你来自哪、你的请求是啥类型、你想要哪份文件、你的 Cookie 是啥、你的 Referer 是啥,还有最关键的一个 Header,那就是 Accept 字段。
这个字段在 HTTP 里是固定的,用来告诉服务器:“我接纳所有类型的内容”,你不用揪心服务器只给你发图片,你拼命想让它给你发 JSON,它也得给你发 JSON,只要数据格式符合你接纳的列表即可。服务器收到后,要是符合条件,就建立一个连接,然后由 Go 服务器(临时服务器)把静态资源发过来。 你看这个 Accept 字段,它实际上限制了服务器能发给你啥。
要是浏览器说“我只接纳图片”,服务器就得挑挑拣拣,只给你发 jpg 和 png,不给 pdf 要么 docx。
这就是 HTTP 根据用户偏好来调配资源的体现。 再聊聊那个著名的 1500 字节 Limit。
这是 HTTP 协议里一个挺古老但至今未改的设定。在 HTTP 1.0 时代,每个包的大小严格限制在 1500 字节以内。
这害得数据包忒大,浏览器自己就得把包拆分,要么服务器得自己拆分。别看这对当时的网络算是一种减负,但这事儿遗留了大量费事。
比如要是某个网页内容特别大,比如一个视频要么一个大图,要是原始包超过 1500 字节,浏览器就得自己切分成多个包,这样会害得请求变得特别复杂,并且服务器那边也得搞复杂的包重组。别看 HTTP 1.1 引入后启动赞成大分组,直到 HTTP/2 彻底打破了这个限制,但"1500 字节”这个概念还在网络上像幽灵一样游荡,时不时会被人拿出来调侃:“你目前的包才 1500 多点啊?” 为了让数据跑得更快,浏览器和服务器之间还有一个协议叫“握手协议”,一般看作是 HTTP 的一局部。当你启动传输数据时,HTTP 1.1 就会自动触发一个二次握手。
这个握手协议会确认你连接的 TCP 会话已经建立,并且会告诉客户端:数据包分片数是多少,每个分块的起始和终止偏移量是多少。
要是这是一个 HTTP/1.1 请求,客户端一般会把第一分块(也就是正文)直接发那会儿,接着发一个"1 分块”的响应,然后再接着发分块。
这种机制叫“流式传输”,它让数据能边传边用,速度飞快。 比如你在看一个高清电影,要么玩一个需求加载大量资源的游戏。
这时候 HTTP 的流式传输就派上了大用场。
要是没有这个机制,浏览器要等整个 HTTP 包(包含正文和响应)全体收齐了,才能显示第一帧画面。但有了流式传输,浏览器拿到数据的第一分块就能立马显示第一帧,后面的分块随着数据体的增添慢慢显示后面的画面。
这就像看电影一样,你刚看到开头,后面哪怕后面有十万字的大段文字,你也能立马看到,出于数据是按需加载的。 再来说说那个 1.1 版本的特性。HTTP 1.1 准你与此同时发起多个请求。
这就是多线程的魅力。
比如你在首页点了“学习”、“搜索”、“新闻”、“设置”几个按钮,你能够一次性把这四个请求发出去。服务器收到后,会去干各自的事儿:去学,去搜,去读,去改设置。它们之间互不干扰,互不等待,最终等你收到所有的“200 OK"响应,你就知道所有页面都加载成功了。 要是只用 HTTP 1.0,这就像四个人跑步,前一个跑完了,后一个才跑,否则你就得干等着。HTTP 1.1 让这四个人能够直接并行,效率瞬间提升。
这就是著名的“并行下载加速”效应,大量网站默认会开启这种模式,让你体验感差别庞大。 HTTP 1.1 还有一个特性叫“预取”(Prefetch)。浏览器能够提前去请求那些你可能立马要用的资源。
比如你打开了一个博客,系统会提前帮你去抓取你最近看过的文章,要么帮你去下载那些常用的插件。
只要你再打开一个新的浏览器标签页,浏览器就会发现这些资源的 URL 已经存有了,就会把它们加载进来,省得你再反复去搜一遍。 再来看看版本迭代。HTTP 1.0 就是那个笨重的版本,数据包大小固定 1500 字节,没有流式传输,不赞成预取,不赞成大小头(Headless),也不赞成长连接。
那时候你发个请求,服务器得等整个包收齐,还得建立连接,还得搞握手,那速度简直慢得离谱,感觉像是在打文字游戏。 HTTP/1.1 别看还是有点保守,但它引入了流式传输,准更大的数据包,准预取,准长连接。
这就意味着你能够一次带更多数据,让传输更流畅。别看 HTTP/1.1 依然有限制(比如每个连接只能发得顶多 65535 个请求,要么顶多 100 个连续包),但它比 1.0 好忒多了。 到了 HTTP/2,它彻底告别了长连接和分块传输的限制。HTTP/2 基于流多路复用,它把 HTTP 包分成大量小的块,然后在同一个 TCP 连接上并发发送。
这就意味着,你一次能够打开几十个浏览器标签页,它们都能跟同一个服务器建立连接,各自独立处理请求,互不干扰。
要是服务器处理慢,一个请求能够暂停,其他的请求持续跑。
这就是所谓的“并行连接”和“流式传输”的结合体。 再讲讲那种需求大量数据包的接口,比如视频流、下载文件。HTTP/1.1 时常会出现那种“消息忒长了,我打包一下发那会儿”,服务器收到后质疑人生,还得去切分。而 HTTP/2 和 HTTP/3 直接就把消息拆分成一个个小包发那会儿,服务器直接接收,不需求任何切分操作。
这大大削减了服务器的 CPU 负担,也节省了网络带宽。 HTTP/1.1 还有一个挺明显的缺点。它默认不赞成流式传输,要不就你显式地去开启流式传输。
这意味着要是你直接发送一个 HTTP 请求,数据务必一次性全体发送完,客户端才会接收。
这在某些场景下体验挺差,比如视频播放,画面卡住。 HTTP/1.1 还有一个大毛病。它是无状态的。
也就是说,服务器不知道你的请求会收到,也不知道你会发几个请求。
要是你要发 1000 个请求,服务器就得循环 1000 次,要么搞复杂的缓冲区管理。HTTP/1.1 要求服务器在连接建立时需求先确认连接,然后才能启动传输,这中间有个“等待”的过程,害得吞吐量下降。 HTTP/2 要解决这些难题,它的核心就是多路复用。它准在一个连接上与此同时处理多个流,只要这些流之间没有冲突。
比如你与此同时向服务器发送 10 个请求,服务器就能够与此同时处理这 10 个请求,互不等待。
这就是所谓的“多路复用连接”。 HTTP/3 进一步升级了它,引入了 TLS/ALS 分级,它准服务器对每个请求做不同的加密级别。
比如你挤带宽的下载请求用 TLS/ALS 分级,把加密包放在后面,不占用带宽;而高优先级的视频请求能够用 TLS/ALS 分级,把加密包放在前面。
这实际上是对 HTTP/2 的进一步优化,让不同需求的服务能更高效地排队。 HTTP/3 还有一个挺酷的特性,叫“连接无涉”。在 HTTP/2 里,所有请求都在一个连接上流,要是服务器处理慢,前面的请求会排队。而 HTTP/3 准你直接建立新的连接。
比如你有一个高优先级的视频请求,你能够在中间插入一个低优先级的网页请求,它们的连接彻底隔离。
要是视频请求卡住了,网页请求能够正常那会儿,视频请求能够单独重连。
这就是“连接无涉”的优势。 HTTP/3 还有一个特性叫“流传输”。它准服务器直接分片发送数据,客户端能够按需接收第一分块。
这大大下降了延迟。 目前咱们看看 HTTP/3 在实际应用里表现如何。
比如你在用浏览器跑一个 AI 模型,要么在一个大文件上跑视频编码。
这时候 HTTP/3 的优势就暴露出来了。你能够把高优先级的视频流单独拿出来,在连接上排队,不占用其他带宽;把低优先级的网页请求插在后面,它们跟视频流是隔离的,互不干扰。
要是视频解码器的处理跟不上,视频能够暂停,网页请求持续跑。 HTTP/3 还有一个特征叫“自协商”。它准客户端和服务器在连接建立时协商加密级别,不需求服务器预先知道客户端的加密本事。
这大大简化了服务器端的配置。 HTTP/3 还能够赞成“多路径传输”。
比如服务器先给客户端一个一般/平平数据包,然后客户端在后台偷偷跑另一个传输路径。
要是主路径的数据包收不到,客户端能够立即切换到备用路径。
这对于大文件传输要么网络不稳定环境特别有用。 再来看 HTTP/3 在 CDN 场景下的表现。
要是你有一个多地域的 CDN,每个地域的服务器都跟一个 HTTP/3 源服务器连接。当用户请求内容时,请求能够分片发送给源服务器,源服务器再分片发送给各地的 CDN 节点。
这样能够把流量分散到各地的服务器上,提升整体处理本事。 HTTP/3 还有一个特性叫"HTTP/3 预取”。就像 HTTP/1.1 赞成预取一样,HTTP/3 也赞成。浏览器能够提前去请求那些你可能立马要用的资源。
不过 HTTP/3 的预取范围更广,它不仅能预取静态资源,还能预取动态数据,比如数据库查询结局、API 响应等。
这大大削减了服务器的压力。 再说说 HTTP/3 对浏览器端的影响。浏览器需求赞成流式传输、多路复用、连接无涉这些特性,它务必升级自己的网络栈。
这意味着你用的浏览器版本越高,体验越流畅。
要是你用的旧浏览器,可能连根本的流式传输都跑不起来,视频卡顿。 HTTP/3 还有一个特征叫"DNS 跳转优化”。在 HTTP/2 里,DNS 查询和 HTTP 请求是分开的,这期间有延迟。HTTP/3 准 DNS 查询和 HTTP 请求在同一个连接上搞定,削减了延迟。别看这主要影响的是快进模式,但在实际使用中,它能让页面加载更快。 HTTP/3 还有一个特性叫"HTTP/3 自协商”。它准客户端和服务器在连接建立时协商加密级别,不需求服务器预先知道客户端的加密本事。
这大大简化了服务器端的配置。 HTTP/3 赞成“多路径传输”。服务器能够分片数据包发送给客户端,客户端接收后分片发送给多个节点。
这提升了网络稳定性。 最终讲一下 HTTP/3 对服务器端的影响。服务器需求赞成多路复用、流传输、连接无涉这些特性,它务必升级自己的网络栈。
这意味着你用的服务器版本越高,性能越稳定。
要是你用的旧服务器,可能连根本的流式传输都跑不起来,速度极慢。 HTTP/3 对云厂商的影响。云厂商需求赞成多路径传输、连接无涉、多路复用这些特性,它们务必升级自己的网络栈。
这意味着云服务的响应速度更快,稳定性更强。
要是你用的旧云环境,可能连根本的流式传输都跑不起来,体验挺差。 HTTP/3 对开发者的影响。开发者需求赞成多路复用、流传输、连接无涉、预取、自协商、多路径传输这些特性,他们务必升级自己的代码。
这意味着开发新功能的成本更低,维护成本更低。
要是你用的旧代码,可能连根本的预取都跑不起来,开发流程繁琐。 HTTP/3 对运营商的影响。运营商需求赞成多路径传输、连接无涉、多路复用、流传输这些特性,它们务必升级自己的网络栈。
这意味着网络更稳定,性能更好。
要是你用的旧网络,可能连根本的流式传输都跑不起来,体验差。 HTTP/3 对应用商店的影响。应用商店需求赞成多路复用、流传输、连接无涉、预取、自协商、多路径传输这些特性,它务必升级自己的客户端。
这意味着应用商店的体验更好,兼容性更强。
要是你用的旧客户端,可能连根本的预取都跑不起来,兼容性极差。 HTTP/3 对保险的影响。HTTP/3 赞成 TLS/ALS 分级,它准服务器对每个请求做不同的加密级别。
这大大增添了保险性。HTTP/3 赞成多路径传输,它准服务器分片数据包发送给客户端,客户端接收后分片发送给多个节点。
这提升了网络稳定性。HTTP/3 赞成连接无涉,它准客户端在连接建立时协商加密级别,不需求服务器预先知道客户端的加密本事。
这大大简化了服务器端的配置。 HTTP/3 对性能的影响。HTTP/3 赞成流传输,它准服务器直接分片发送数据,客户端能够按需接收第一分块。
这大大下降了延迟。HTTP/3 赞成多路复用,它准在一个连接上与此同时处理多个流,只要这些流之间没有冲突。
这提升了吞吐量。HTTP/3 赞成连接无涉,它准服务器在连接建立时协商加密级别,不需求服务器预先知道客户端的加密本事。
这大大简化了服务器端的配置。 HTTP/3 对成本的影响。HTTP/3 赞成预取,它准浏览器提前去请求那些你可能立马要用的资源。
这削减了服务器的压力。HTTP/3 赞成自协商,它准客户端和服务器在连接建立时协商加密级别,不需求服务器预先知道客户端的加密本事。
这削减了服务器端的配置成本。HTTP/3 赞成多路径传输,它准服务器分片数据包发送给客户端,客户端接收后分片发送给多个节点。
这提升了网络稳定性,削减了服务器维护成本。 HTTP/3 对兼容性影响。HTTP/3 赞成 TLS/ALS 分级,它准服务器对每个请求做不同的加密级别。
这增添了保险性。HTTP/3 赞成多路径传输,它准服务器分片数据包发送给客户端,客户端接收后分片发送给多个节点。
这提升了网络稳定性。HTTP/3 赞成连接无涉,它准客户端在连接建立时协商加密级别,不需求服务器预先知道客户端的加密本事。
这大大简化了服务器端的配置。 HTTP/3 对开发成本影响。HTTP/3 赞成预取,它准浏览器提前去请求那些你可能立马要用的资源。
这削减了服务器的压力。HTTP/3 赞成自协商,它准客户端和服务器在连接建立时协商加密级别,不需求服务器预先知道客户端的加密本事。
这削减了服务器端的配置成本。HTTP/3 赞成多路径传输,它准服务器分片数据包发送给客户端,客户端接收后分片发送给多个节点。
这提升了网络稳定性,削减了服务器维护成本。 HTTP/3 对运维成本影响。HTTP/3 赞成流传输,它准服务器直接分片发送数据,客户端能够按需接收第一分块。
这下降了延迟。HTTP/3 赞成多路复用,它准在一个连接上与此同时处理多个流,只要这些流之间没有冲突。
这提升了吞吐量。HTTP/3 赞成连接无涉,它准服务器在连接建立时协商加密级别,不需求服务器预先知道客户端的加密本事。
这简化了服务器端的配置。 HTTP/3 对用户体验影响。HTTP/3 赞成预取,它准浏览器提前去请求那些你可能立马要用的资源。
这削减了服务器的压力,加快了页面加载速度。HTTP/3 赞成自协商,它准客户端和服务器在连接建立时协商加密级别,不需求服务器预先知道客户端的加密本事。
这增添了保险性,提升了用户体验。HTTP/3 赞成多路径传输,它准服务器分片数据包发送给客户端,客户端接收后分片发送给多个节点。
这提升了网络稳定性,提升了用户体验。 HTTP/3 对系统稳定性影响。HTTP/3 赞成流传输,它准服务器直接分片发送数据,客户端能够按需接收第一分块。
这下降了延迟,提升了网络稳定性。HTTP/3 赞成多路复用,它准在一个连接上与此同时处理多个流,只要这些流之间没有冲突。
这提升了吞吐量,增强了系统稳定性。HTTP/3 赞成连接无涉,它准服务器在连接建立时协商加密级别,不需求服务器预先知道客户端的加密本事。
这简化了服务器端的配置,增强了系统稳定性。
文章版权声明:除非注明,否则均为 静秋号介绍 原创文章,转载或复制请以超链接形式并注明出处。
相关标签: