HTTP,即超文本传输协议(HyperText Transfer Protocol),是一种用于分布式、协作式和超媒体信息系统的应用层协议。简单来说,它是客户端(如浏览器)和服务器之间进行通信的规则。通过 HTTP 协议,客户端可以向服务器发送请求,获取各种资源,如网页、图片、视频等,而服务器则根据请求返回相应的响应。
一、统一资源定位符
我们是通过某个网址像后端发送请求的,例如我们平常搜索百度(www.baidu.com),这个网址叫做url,也叫统一资源定位符,由协议、主机、端口号和路径组成

答疑------资源定位符是怎么定位到某一台主机上的:
我们知道要想发送信息,首先得有网络,也就是要连接路由器,一个路由器连接着几台主机,就会形成一个小型的局域网,路由器能给这几台主机划分不同的ip地址,这就能实现这几台主机之间的相互通讯,但显然局域网不能支持更大范围的通讯,所以需要一个更大的路由器对下边的小路由器进行子网划分,大致可以理解为下图:

答疑------互联网的消息是如何传递的:在路由器之间不断进行跳转
向其他主机发送消息时,数据帧会携带目的ip和源ip一起发送,IP起到寻址的作用,同时数据帧中还会有源mac地址和目的mac地址

每个路由器都会有一个网卡,数据在网卡上不断进行跳转,而网卡上有目的mac地址和源mac地址,数据帧上的源mac地址是现在所处的网卡的mac地址,而目的mac地址是要跳转的目标路由器的mac地址,跳转成功后,数据帧的源mac地址和目的mac地址也会发生该变,这就是数据的传递过程。
我们看的的url上一般都是域名,没有直接拿地址去访问的习惯,所以当客户端(如浏览器)拿到一个 URL 时,会先对域名进行解析。
域名系统(DNS,Domain Name System)发挥着核心作用。DNS 就像是互联网的电话簿,它将人们易于记忆的域名(如www.example.com)解析为对应的 IP 地址(例如192.168.1.1)。客户端首先会检查本地 DNS 缓存,看是否已经存在该域名对应的 IP 地址记录,如果有则直接使用;若没有,客户端会向本地 DNS 服务器发送查询请求。本地 DNS 服务器若在自己的缓存或区域文件中找到记录,就返回给客户端;若未找到,它会按照一定的递归或迭代查询方式,向根 DNS 服务器、顶级域名(TLD)服务器、权威 DNS 服务器等依次查询,直到获取到正确的 IP 地址,然后将其返回给客户端。
通过 DNS 解析得到 IP 地址后,客户端就能利用这个 IP 地址,结合 URL 中的端口号,通过 TCP 协议与对应的主机建立连接,进而向服务器发送 HTTP 请求,获取目标资源。
二、HTTP 协议的特点
- 简单快速:客户端只需发送请求方法和路径等少量信息,服务器就能快速理解并处理请求。例如,常见的 GET 请求用于获取资源,格式简单明了,如GET /index.html HTTP/1.1。
- 灵活:HTTP 协议允许传输各种类型的数据,只要客户端和服务器能够识别数据的类型。通过设置Content-Type头部字段,就可以指定数据的格式,如text/html表示 HTML 文档,image/jpeg表示 JPEG 图片等。
- 无状态:HTTP 协议本身不会记住客户端的请求历史。每一次请求都是独立的,服务器无法区分这是来自同一个客户端的连续请求还是不同客户端的请求。这种特性虽然简化了服务器的设计,但在某些需要保持用户状态的场景下,就需要借助其他技术,如 Cookie、Session 来实现。
三、HTTP 协议的工作流程
- 建立连接:客户端(如浏览器)通过 TCP 协议与服务器建立连接。这一过程通常需要经过三次握手,确保双方都能正常通信。
- 发送请求:连接建立后,客户端向服务器发送 HTTP 请求。请求包含请求行、头部字段和请求体(并非所有请求都有请求体,如 GET 请求)。例如:
TypeScript
GET /news/article1.html HTTP/1.1
Host: www.example.com
User - Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
这里的GET是请求方法,/news/article1.html是请求路径,HTTP/1.1是协议版本,Host头部字段指定了请求的目标服务器,User - Agent头部字段则标识了客户端的类型和版本等信息。

- 服务器处理请求并返回响应:服务器接收到请求后,根据请求的内容进行处理。如果请求的资源存在,服务器会将资源打包成 HTTP 响应返回给客户端。响应同样包含状态行、头部字段和响应体。例如:
TypeScript
HTTP/1.1 200 OK
Content - Type: text/html
Content - Length: 1234
<!DOCTYPE html>
<html>
<head>
<title>文章标题</title>
</head>
<body>
<p>文章内容...</p>
</body>
</html>
其中,HTTP/1.1是协议版本,200 OK是状态码和原因短语,表示请求成功。Content - Type头部字段指定了响应体的类型为 HTML,Content - Length头部字段表示响应体的长度。后面的 HTML 代码就是响应体的内容。
- 关闭连接:数据传输完成后,客户端和服务器可以选择关闭连接。在 HTTP/1.0 中,默认情况下每次请求完成后都会关闭连接;而在 HTTP/1.1 中,默认采用持久连接,即一次连接可以处理多个请求,减少了连接建立和关闭的开销。
四、HTTP 协议的请求方法
- GET :用于获取指定资源。通常用于向服务器查询数据,如获取网页、图片等。GET 请求的参数会附加在 URL 后面,以?分隔,多个参数之间用&连接。例如:https://www.example.com/search?keyword=apple&page=1。
- POST :用于向服务器提交数据,通常用于表单提交、文件上传等场景。POST 请求的数据会放在请求体中,不会显示在 URL 中,相对 GET 请求更安全。(但没有做到绝对安全)
五、HTTP 协议的状态码
状态码是服务器对客户端请求处理结果的标识,它由三位数字组成。常见的状态码有:
- 1xx(信息性状态码):表示请求已被接受,正在处理中。例如,100 Continue表示客户端可以继续发送请求的剩余部分。
- 2xx(成功状态码):表示请求已成功被服务器处理。其中,200 OK是最常见的成功状态码,表示请求成功;201 Created表示请求成功并且服务器创建了新的资源。
- 3xx(重定向状态码):表示需要客户端采取进一步的操作才能完成请求。例如,301 Moved Permanently表示资源已永久移动,客户端应使用新的 URL 再次请求;302 Found表示资源临时移动,客户端应使用原 URL 再次请求。
- 4xx(客户端错误状态码):表示客户端发送的请求有错误。例如,400 Bad Request表示客户端请求的语法错误;401 Unauthorized表示客户端未授权,需要进行身份验证;404 Not Found表示服务器无法找到请求的资源。
- 5xx(服务器错误状态码):表示服务器在处理请求时发生了错误。例如,500 Internal Server Error表示服务器内部发生了未知错误;503 Service Unavailable表示服务器当前不可用,可能是由于维护或过载等原因。
六、https协议
https协议
http协议本身并不安全,因为数据是用明码进行传输的,而https协议在http的基础上加入了安全套接字s:TSL/SSL(安全套接字)
加密模式有两种:
对称加密--->产生的是秘钥(加密解密用的是同一个秘钥)

秘钥不能在网上进行传输
非对称加密--->产生的是公钥和私钥
公钥加密的数据需要私钥解密
私钥加密的数据需要公钥解密
https的加密模式是对称加密和非对称加密 共同作用的方式。

数字证书:一个网站的身份证

我们上面介绍http的特点时提到过http本身是无状态的,也就是说我们这次提交的请求和下次提交的请求本身没有联系,那么对于一些需要多次提交信息才能完成的操作就会有问题
cookie(浏览器的解决方案)


七、总结
通过了解 HTTP 协议的基本概念、特点、工作流程、请求方法、状态码以及发展历程,我们能够更好地理解互联网的运行机制,为开发高效、稳定的网络应用提供坚实的基础。随着互联网技术的不断发展,HTTP 协议也在持续演进,未来它将继续为我们带来更优质的网络体验。