news 2026/5/28 20:22:10

Http到底是怎么一回事?我们来大解剖

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Http到底是怎么一回事?我们来大解剖

http大家都很熟悉了,大家的网址都是http/https开头的,那到底这个http是什么呢,我们今天来研究研究

HTTP,全称为HyperText Transfer Protocol,中文是超文本传输协议

我们可以拆解这个名词来理解它:

超文本:字面意思是“超越文本”,它不仅仅指文字,还包括图片、音频、视频、超链接等一切你能在网页上看到的内容

传输:HTTP 的核心作用是在两点之间传递信息。通常是在 Web 浏览器(客户端)和 Web 服务器(服务器端)之间。

  1. 协议:这是一种规则、约定或标准。就像两个人打电话需要约定好都说中文才能沟通一样,HTTP 规定了浏览器和服务器之间通信时所要遵循的格式和规则。它确保了通信双方能互相理解

  2. 简单来说,HTTP 就是一套用于从网络服务器传输超文本(即网页)到本地浏览器(客户端)的通信规则。

当你浏览器地址栏里输入一个网址(如www.zhihu.com)并按下回车时,你的浏览器就会使用 HTTP 协议向知乎的服务器发送一个请求。服务器收到请求后,再使用 HTTP 协议将网页的文本、图片等内容打包成一个响应,发回给你的浏览器。浏览器最后将这些内容渲染成你看到的完整页面

http无状态简化了服务器设计,但现实应用(如登录状态、购物车)需要“状态”。因此,引入了CookieSession等技术来在客户端或服务器端记录状态,弥补 HTTP 无状态的缺陷

一、基础认识

我们先来简单认识一下http,http是网络模型分层中的应用层中的一个协议,它依赖于底层可靠的传输协议。通常HTTP 使用TCP作为其传输层协议。TCP 确保了数据能完整、按顺序地送达,为 HTTP 的可靠传输提供了基础。默认端口是 80(HTTP)和 443(HTTPS),其他协议还有NTF(传输文件)、SMTP/POP3(发送/接收邮件)、DNS(域名转化为ip)

那我们先从http报文讲起

1、请求报文

(1)请求行

包含请求方法、请求目标(URL或URI)和HTTP协议版本。

(2)请求头部

包含关于请求的附加信息,如Host、User-Agent、Content-Type等。

(3)空行(CRLF)

请求头部和请求体之间用空行分隔。

(4)请求体(可选)

包含请求的数据,通常用于POST请求等需要传输数据的情况

HTTP 可以传输任何类型的数据,只需在报文头部用Content-Type字段标明即可

2、响应报文

(1)状态行

包含HTTP协议版本、状态码和状态信息

(2)响应头部

包含关于响应的附加信息,如Content-Type、Content-Length等

(3)空行(CRLF)

响应头部和响应体之间用空行分隔

(4)响应体(部分不需)

包含响应的数据,通常是服务器返回的HTML、JSON等内容

二、请求的类型有哪些?

GET:获取指定资源

POST:提交数据,通常用于提交表单数据或进行资源的创建

PUT:更新指定资源,通常用于更新已存在的资源

DELETE:用于请求服务器删除指定资源

HEAD:类似于GET请求,但只返回资源的头部信息,用于获取资源的元数据而不获取实际内容

这里我们需要仔细讲一下大家常用的GET和POST:

1、GET 从服务器获取指定的资源

GET请求的参数位置一般是写在URL中,URL规定只能支持 ASCII

所以 GET 请求的参数只允许 ASCII 字符 ,而且浏览器会对 URL 的长度有限制

2、POST 根据请求负荷(报文body)对指定的资源做出处理

POST 请求携带数据的位置一般是写在报文body中,body 中的数据可以是任意格式的数据

只要客户端与服务端协商好即可,而且浏览器不会对body大小做限制

这里来一个插曲,就是很多公司,比如推特,他们会采用所有请求都用post,猜测一下为什么要这么做?

答案是:首先确实是为了安全,其次是因为统一规范,有一些封装的RPC框架是BSON二级制进行封装的,query太小了塞不下

三、HTTP和HTTPS区别?

区别主要有以下四点:

  1. HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题
  2. HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输
  3. HTTP 连接建立相对简单,TCP三次握手之后便可进行HTTP的报文传输。而HTTPS在TCP三次握手之后,还需进行SSL/TLS的握手过程,才可进入加密报文传输。两者的默认端口不一样,HTTP 默认端口号是80,HTTPS 默认端口号是 443
  4. HTTPS协议需要向CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的

四、为什么有HTTP/1.1和HTTP/2.0

HTTP/2 相比 HTTP/1.1 性能上的改进:

1、头部压缩

HPACK 算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。

2、二进制格式

HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式,头信息和数据体都是二进制,并且统称为帧:头信息帧、数据帧

这样虽然对人不友好,但是对计算机非常友好,因为计算机只懂二进制,那么收到报文后,无需再将明文的报文转成二进制,而是直接解析二进制报文,这增加了数据传输的效率

3、并发传输

引出了 Stream 概念,多个 Stream 复用在一条 TCP 连接。解决了HTTP/1.1 队头阻塞的问题。

3、服务器主动推送资源

HTTP/2 还在一定程度上改善了传统的「请求 - 应答」工作模式,服务端不再是被动地响应,可以主动向客户端发送消息

五、HTTP常用状态码

1xx 类状态码

提示信息,协议处理中的一种中间状态,实际用到的比较少。

2xx 类状态码

成功,服务器成功处理了客户端的请求。

3xx 类状态码

重定向,客户端请求的资源发生了变动,需要客户端重新发送请求获取资源

4xx 类状态码

客户端发送的报文有误,服务器无法处理。

5xx 类状态码

表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。

其中常见的具体状态码有:

200:请求成功;

301:永久重定向;

302:临时重定向;

404:无法找到此页面;

405:请求的方法类型不支持;

500:服务器内部出错;

六、HTTP长连接是什么?

HTTP 协议采用的是「请求-应答」的模式,也就是客户端发起了请求,服务端才会返回响应,一来一回这样

由于 HTTP 是基于 TCP 传输协议实现的,客户端与服务端要进行 HTTP 通信前,需要先建立 TCP 连接,然后客户端发送 HTTP 请求,服务端收到后就返回响应,至此「请求-应答」的模式就完成了,随后就会释放 TCP 连接

如果每次请求都要经历这样的过程:建立 TCP -> 请求资源 -> 响应资源 -> 释放连接,那么此方式就是 HTTP 短连接。这样实在太累人了,一次连接只能请求一次资源。

能不能在第一个 HTTP 请求完后,先不断开 TCP 连接,让后续的 HTTP 请求继续使用此连接?

当然可以,HTTP 的Keep-Alive就是实现了这个功能,可以使用同一个 TCP 连接来发送和接收多个 HTTP 请求/应答,避免了连接建立和释放的开销,这个方法称为 HTTP 长连接。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 18:02:03

抖音商家如何快速精准的找到自己需要的达人?

从海量达人中锁定最适合的合作对象,抖音商家达人筛选全攻略在此。 在抖音电商生态中,达人合作已成为品牌获取流量、提升销量的重要途径。面对平台上数以万计的带货达人,许多商家却陷入“盲目寻找”或“选择困难”的困境。 如何从海量达人中找…

作者头像 李华
网站建设 2026/5/20 19:45:23

合格Java程序员必备:Spring全家桶技术!

Spring这个技术栈,在LZ心目中一直是最好的Java项目,没有之一。这玩意面试必考工作必用,是我们Java人的饭碗;它跟它后面诞生的一系列解决方案被我们亲切的成为Spring全家桶,如果你自诩是一名合格的Java程序员&#xff0…

作者头像 李华
网站建设 2026/5/21 10:40:52

大厂Java面试前复习的正确姿势(面试题+场景题)

金三银四还在继续,又是一个跳槽的好季节,准备跳槽的同学都摩拳擦掌准备大面好几场,今天为大家准备了互联网面试必备的 1 到 5 年 Java 面试者都需要掌握的面试题,分别 JVM,并发编程,MySQL,Tomca…

作者头像 李华
网站建设 2026/5/23 2:59:48

vscode的md文件显示memaid图

VSCode 支持在 Markdown 中显示 Mermaid 图,主要有两种方式:🚀 方式一:使用内置功能 (VSCode ≥ 1.75)新版本的 VSCode 已内置 Mermaid 支持,无需安装额外插件。确认版本:确保您的 VSCode 版本 ≥ 1.75。编…

作者头像 李华
网站建设 2026/5/28 12:50:46

基于微信小程序生猪养殖信息化管理系统(源码+论文+部署+安装)

感兴趣的可以先收藏起来,还有在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望可以帮到大家。 一、程序背景 随着我国社会经济发展,居民对猪肉食品安全和质量的关注度持续提升&#xff0…

作者头像 李华