http 协议是我们日常生活中使用再多的一个协议,属于应用层的范畴。本章将会带着大家看一下http协议是什么样的,了解 http 请求 与 http 应答的不同,以及里面相关的报头的相关熟悉都是干什么的,我将会以一个初学者的角度为大家进行讲解。

目录
[1. 背景知识](#1. 背景知识)
[1.1 是什么](#1.1 是什么)
[1.2 有什么](#1.2 有什么)
[1.2.1 http连接](#1.2.1 http连接)
2.http请求报文
[2.1 宏观认识](#2.1 宏观认识)
[2.2 深入学习](#2.2 深入学习)
[2.2.1 http 方法](#2.2.1 http 方法)
[2.2.2 URL](#2.2.2 URL)
[2.2.3 协议的版本](#2.2.3 协议的版本)
[2.2.4 请求报头](#2.2.4 请求报头)
[3. http 应答报文](#3. http 应答报文)
[3.1 宏观了解](#3.1 宏观了解)
[3.2 状态码](#3.2 状态码)
[3.3 状态码描述](#3.3 状态码描述)
[3.4 对于报头的补充](#3.4 对于报头的补充)
[4. 其他知识点补充](#4. 其他知识点补充)
[4.1 http 协议的特点](#4.1 http 协议的特点)
[4.2 Cookie 与 Session](#4.2 Cookie 与 Session)
1. 背景知识
1.1 是什么
http协议:是一种用来传送超文本的一种协议(协议的本质就是一个结构体) 。超文本就是除了可以传递普通的文本比如说是文字,还可以传递图片、视频、音频、动画等等...既然是一种协议那么在网络当中如果想要进行传送的话,就必须通过序列化、反序列化的方式进行传递。
下面来看一下官方的解释:HTTP 协议(HyperText Transfer Protocol ,超文本传输协议)是一种用于在客户端和服务器之间传输数据的应用层协议 。简单来说,它规定了 浏览器(客户端)和网站服务器之间通信的规则。
http 协议跟我们之前写的 TCP套接字,类似都是一个客服端向服务端发送请求,服务端在得到请求之后返回到客户端,当然 http 底层也是采用的 tcp 的方式实现的 。只不过不一样的是这个的客服端是我们的浏览器!没错就是你当前正在浏览网页的这个浏览器。这个浏览器帮助我们优化了许多的事情,我们不需要在吭哧吭哧的写一堆底层的代码了,直接去使用浏览器我们就可以从服务端拿到想要的数据。**想要学好 http 协议,我认为应该先了解一下相关的 n 词感念,然后让这个 http 跑一下,最后我们在重新进行理解 http 协议。**但是我就不具体演示代码怎么跑了,我会将相关的代码放到我的码云仓库当中,感兴趣的同学,可以去下载看一下。
1.2 有什么
1.2.1 http连接
https://news.cctv.com/2025/10/27/ARTIf1dqX6WnvPz1Ag3ITZsO251027.shtml
这个就是一个常见的http请求的超链接。那同学可能有疑问了,主包主包这跟之前的写的套接字有什么关系啊!都没有 ip 跟 prot, 我怎么知道是要去连接哪个服务器主机,哪个服务的哪个进程啊! 别急,这就要详细的介绍一下浏览器这个客服端帮我做的工作了。 news.cctv.com,这个叫做域名,然后简单来说,我们的网络就是可以通过这个域名来找到对应服务器的 ip 地址,然而这个 ip 地址是怎么找到的,他是放到那里的,我们不需要太多的了解,浏览器帮助我们完成的就可以了。 然么端口呢?同学们你们还记不记得我们之前绑定端口的时候有一些特定的端口号,是不可以进行直接访问的,那么那一部分端口号,其中就特别为 http 规定了端口号,这个写工作,也就是浏览器直接就已经内置好了。然后呢?然后我怎么找到这个文件啊!
/2025/10/27/ARTIf1dqX6WnvPz1Ag3ITZsO251027.shtml,同学们看到这个是不是特别像是一个文件路径格式呀?在这个 2025 文件下,10/27/下面的这个这个 .shtml 文件被我们访问了,需要注意的是我们访问的不是对方服务器下的目录的文件,而是对应的web服务器根目录下的文件。后面的大家记住就可以了。是不是非常的简单。我们再来看一个使用谷歌搜索的相关 url(统一资源限定符)。
是不是也是类似的方式呀!www.google.com自动解析成谷歌服务器的ip地址,然后后面的相关内容为/search这个可能是一个表单的提交方法当中的 uri,也可以简单的理解为一个文件,我要打开这文件。 q=%E6%B1%89%E8%AF%BA%E5%A1%94这样的内容就是表示我输入的汉字,给他进行了特殊字符的解析,
这个我输入的123就是不需要进行解析的。然后后面的都是通过 & 这个表示进行连接的标志项,让谷歌的服务器可以看懂这个内容🥰。
通过我上面的讲解同学们,是不是对于这个 http 怎么用的有了一定的了解呀!接下来我带大家具体的去看一下 http 的报文的一些细节😀😀😀!
2. http 请求报文
2.1 宏观认识
想要了解 http 就要学习他的协议的相关字段。本质就是一个结构体,下面我来详细的介绍一下。他总的可以分成四个层次:请求行、请求属性字段、数据部分。

- 请求方法:最常见的具有get 和 post 方法。还有其他的 put、head、delete、OPTIONS等其他方法,我主要在后面会讲解前面的两种最为常见的方法,主要跟表单搭配在一起的,实现动态的交互的过程
- URL: 根据 URL 这个就知道我要访问哪个具体的文件。
- 版本号:有 http/1.1 http/1.0 之类的
- 剩下的就是请求字段的属性,这个属性当中是以KV的方式来进行存放的,当我们在交互一个图片、音频的时候必须要定义这个里面的字段(Content-Type),还需要具有 Content-Length: 这个表示后面的请求数据的长度,主要是因为我们的 http 协议起始底层时使用 tcp 协议来进行传送数据的,这个tcp 是按照字节流的方式传送数据,那么就需要有多长的长度就读取缓冲当中的对应长度的数据。
- 不要小瞧这个空行,你以为是一个青铜,实际是一个王者!因为我们的服务器在读取相关的内容的时候是要保证读到一个完整的报头!那么如何保证呢?就是要去读到空行才结束,这个就是协议双方都约定好这样的规定。然后根据 Content-Length, 在读取对应的数据,这个可以保证 服务端 读取到一个完整的请求!
这个就是一个 Http 请求的具体样式,我们服务端拿到的就是这样的内容!
2.2 深入学习
2.2.1 http 方法
这一部分内容也就是 HTTP 报文的第一个位置的内容,下面是所有的方法,而比较常见的就只有get,post。我的下文重点进行描述,也仅仅只是基于这两种方法来进行详细的结束。
先建立一个共识:我们进行访问网页的时候就只有两种状态,要么是获得,要么是发送数据。获得页面最常见的方法也就是使用 get!这个选项常常使用在我们的表单当中,在表单当中的Form中有action选项和后面的method,这个选项就可以定义发送的方式!也就规定了这个选项是什么东西**。使用 get 和 post 的区别就在于我们 get 会将你输入的内容放到 RUL 当中,而 post 会将内容放到报文的有效数据当中。一个直接现实容易泄露,另外一个较为安全。其他的没有什么别的用处!**
html<form action="/submit" method="get"> <input type="text" name="username" placeholder="用户名"> <input type="password" name="password" placeholder="密码"> <button type="submit">提交</button> </form>想要真正的去理解这个东西,我们还需要看一个东西,那就是 action="/submit" 他是一个什么鬼?他是通过路径的方式去访问方法,其实这个也类似与是一个目录的路径的结构,我们回去执行,我们的服务器的根目录下的这个/submit 文件,将这个form 表单里面的信息,传递给这个submit,让 submit 去处理服务,这种方法是提供微服务接口 。submit 的本质:就是一个文件,里面具有我们实现登录验证的方法函数。**这种方法就叫做RESTFUL方法!**我们看一个百度搜索的例子:这个里面的action:/s,就是一个搜索的服务,会将我们的内容,直接传递给它,它来帮助我们实现搜索的功能。
post 的方法也是类似的,只不过是将传送的内容,给隐藏起来了!别人看不见了!还有其他的方法,也就是不长考的,就不描述了。
2.2.2 URL
URL:表示我想要查找的文件在 Web 服务器的哪个目录下面。
2.2.3 协议的版本
顾名思义:就是协议的版本。随着时代的发展,人的需求也是在不断的进行变化的,所以随着我们想要方式的资源越来越丰富,那么就需要有对应的版本实现兼容。以下是相关内容,现用现查就可以。
值得一提的是:短链接:需要一次就进行 tcp 链接,完成后就会关闭 tcp 链接。长链接:建立好连接之后,不会断开连接,等到了特定的时候才会进行连接的断开。这也就是 1.1 进行重大更新的地方,之前的都是短链接!

2.2.4 请求报头
**他的作用是附带一些详细的信息,帮我我们更好的处理请求与应答。**比如告诉我 Connection 是长连接还是短连接,Content-Length,告诉我浏览器要接受到的http报文中请求报文,它的长度是多少等。我挑几个重点的进行一下讨论。
还需要了解的是:这个 http 报它的格式是采用的K-V的方式,类似于 JSON 这样的格式。然后需要使用序列化,反序列化的方式进行发送。
- Connection: 长连接还是短连接。双方在进行三次握手的时候会相互交换信息。然后选择对应的连接方式(如果你是一个长连接的请求,但是对方的协议版本比较老,那么你就只能用短链接的方式进行传送数据)keep-alive就是长连接,close 就是短链接。
- Content-Length:http 报文当中,请求报文的数量。众所周知,tcp 是面向字节流的,那么这就使得一个应用层的进程拿到报头之后如何在接受缓冲区当中得到相应大小的正文呢?这个需要使用这个参数,我们可以进行指定,也可以不指定。应为这样的工作,浏览器它作为一个客户端,就已经帮我们实现了对应的操作!
- Content-Type: 这个属性当我们进行传递文本之外的东西,我们必须要使用制定。会有一个这种表,HTTP Content-Type(MIME)对照表!我们需要使用里面特定的格式进行映射才行,然后还需要注意的是发送以及读取图片的超文本的格式必须是二进制的方式来进行读取,不能是按照字符的方式进行读取!
3. http 应答报文
3.1 宏观了解
这个和请求非常的类似,这里我们仅仅说明状态码与响应状态。下面是协议的格式以及抓到到的一个应答。
3.2 状态码
这么多的状态码,肯定是不需要全部都记住的,我们最常见的就是4开头的和2开头的状态码,分别表示客户端错误以及正常返回。
我们日常中很少会看到 5 开头的错误,因为如果直接将暴露给别人,别人会趁机钻空子,攻击我们的服务器,尤其是力扣、洛谷这样的服务器。攻击者就会篡改数据之类的,所以有的时候即使是服务器的错误,那么反馈给用户的时候也是 4 开头的错误。然后这种情况产生的原因主要是应为访问服务器的数量太多了,导致服务器崩掉了,或者是服务器内部发生了错误。
- 2XX,就是被服务器成果接受了,同时也成功处理了。
- 1XX,表示对方服务器正在被接受,但是还没有进行回应,我知道你很急,但是你先不要急☺️。
- 3XX,**这个表示进行了重定向。具有临时重定向与永久重定向。**这个我们需要仔细的讨论一下。临时重定向:客户端的tcp连接不做更改,仅仅是进行跳转,它的作用在于:我们进行登录访问 B 站与不登陆 B 站访问的页面功能都是不的,在比如说有会员与没有会员享受的服务也是不相同的,这个就是使用的临时重定向。
- 永久重定向:这个功能主要是给浏览器看的,因为浏览器的搜索引擎会不定期的去更新一些常见的网站对应的 ip,一旦发生了永久重定向搜索引擎就会修改他的域名与ip,下次直接跳转到这个位置。
- 4XX,表示我们访问的错误,比如你访问一个不存在的网页,或者是一个网页当中你随便修改了一个不存的 RUL,这样的就不返回报错,是你客户端的问题。

3.3 状态码描述
就是对于返回的的状态码进行的一个描述信息,比如 OK,错误之类的。这个对于我们后端工程师来说不是很看重,可以随意书写🙃。下面是一些状态码描述,想要了解自己去查看就可以了。

3.4 对于报头的补充
- Host: 客⼾端告知服务器, 所请求的资源是在哪个主机的哪个端⼝上;
- User-Agent: 声明用户的操作系统和浏览器版本信息;
- Referer: 当前页面是从哪个页面跳转过来的;
- Location: 搭配3xx状态码使用, 告诉客⼾端接下来要去哪里访问;
- Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
4. 其他知识点补充
4.1 http 协议的特点
它是一个基于无连接,无状态的。
- 无连接?你看你上面讲的不是建立链接吗?同学们!上面的连接时由 TCP 实现的,这个连接也是TCP 实现的,跟我们的 HTTP 没有关系!这也就表明:HTTP 它根本就不关心这个 TCP 连接它怎么样了,他就只关心Requset 和 Response。拿到这个报文后去进行处理。
- 无状态:就是说 http 不会保存任何信息,http 对应的服务器是一种"文件"服务器,仅仅是提供文件,但是不会保存别人发送来的数据或者是文件。不对啊!主包主包那你看有些网站,我登陆过一次他就会记住我,我下次就不需要再再次登陆了呀😉?没错,确实会这样!这个就是我接下来要讲的Cookie 的作用。
4.2 Cookie 与 Session
Cookie 会保存我们的一些信息,例如我们登陆的账户以及密码! 他是怎么实现的呢?我来画图给大家讲解一下。简单来说就是每次发送请求的时候都会携带这个 Cookie 的信息。对于同一部分的信息,就不要我们进行多次传递了。
然后 Cookie 有存放到磁盘当中的方式,也是具有存放到内存当中的方式。这个就是一个相关的例子。
Session 又是一个什么东西?保持用户状态:HTTP 是无状态的,每一次请求都是独立的。Session 可以让服务器记住某个用户的操作或登录状态。就像服务器给每个用户开了一个小抽屉,里面放用户的状态信息。
我上面所描述的东西都是,附加的东西,本身不属于http的内容,但是可以方便我们的 http 请求。
5.总结
本章主要用于我学习 http协议。如果是有其他的错误还请批评指正。如果对你有帮助还请给我点个赞👍👍👍。

这个我输入的123就是不需要进行解析的。然后后面的都是通过 & 这个表示进行连接的标志项,让谷歌的服务器可以看懂这个内容🥰。





然后 Cookie 有存放到磁盘当中的方式,也是具有存放到内存当中的方式。这个就是一个相关的例子。