一、什么是HTTP协议?
HTTP协议,全称 Hyper Text Transfer Protocol(超⽂本传输协议)的缩写,是⽤于服务器 与客户端浏览器 之间传输超⽂本数据(⽂字、图⽚、视频、⾳频)的应⽤层协议。它规定了客户端如何向服务器发送请求,以及服务器如何对请求做出响应,定义了请求和响应的格式与规则,是互联网通信的基石。
协议特点:灵活可扩展、基于TCP/IP的可靠传输、应用层协议、请求-应答模式、无状态。
二、HTTP协议通信过程
HTTP是一个应用层协议,默认端口为80,在传输层使用TCP协议进行数据的传输。

通信过程如下:
1.当用户发起一个新的请求;
2.浏览器发起对服务器的TCP连接请求;
3.服务器与浏览器之间会按照TCP协议的三次握手,建立之间的TCP连接;
4.浏览器按照http协议格式,创建请求数据包(http请求报文);
5.将请求数据包(http请求报文)发送至服务器;
6.服务器按照http协议格式,解析请求报文;
7.执行请求处理,调用相关业务逻辑方法,产生响应数据;
8.服务器按照http协议格式,将响应数据封装至响应数据包(http响应报文);
9.服务器将响应数据包,发送至浏览器;
10.浏览器按照http协议格式,对响应数据包进行解析;
11.浏览器将响应数据包中的响应内容,显示至浏览器页面,呈现给用户;
三、HTTP报文
1.请求报文
浏览器通过URL发起⼀个请求时,会发送⼀个 http 请求报⽂给⽬标服务器,服务器根据请求报⽂中携带的请求数据进⾏处理。
请求报文结构 :
· 第一行是包含:请求方式、URL、协议版本
· 接下来的多⾏都是http请求⾸部内容,其中包含若⼲个http⾸部字段
· ⼀个空⾏⽤来分隔⾸部和内容主体Body
· 最后是请求的内容主体
2.响应报文
当服务器处理完请求后,会将响应数据放入http响应报文中返回给浏览器。
响应报文结构:
· 第一行包含:协议版本、状态码以及描述。
· 接下来的若干行是首部内容
· 一个空行分隔首部和内容主体
**·**最后是响应的内容主体
四、HTTP请求方式
1.GET:获取资源
GET方法用于使用给定的URL从给定服务器中检索信息,完成从指定资源中请求数据。使用GET方法的请求应该只是检索数据,并且不会对数据产生其他影响。
2.POST:提交数据增加资源
POST方法用于将数据发送到服务器以创建或增加资源。使用post方法,如果两个请求相同,后一个请求不会覆盖第一个请求,所以post用于增加资源。
3.HEAD:获取响应报头
HEAD和GET方法类似,但是不返回响应报文内容主体部分,仅传输响应报头部分。主要用于确认URL的有效性以及资源更新的日期时间等。
4.PUT:修改资源
PUT方法用来修改资源,要求在请求报文的主体中包含数据内容,然后保存到请求URL指定位置。使用put方法,如果两个请求相同,后一个请求会覆盖第一个请求,所以put用于修改资源。
5.DELETE:删除资源
DELETE方法用来删除指定的资源。
6.OPTIONS:查询支持的方法
查询指定的URL能够支持的方法。会返回Allow:GET,POST,HEAD,OPTIONS等请求方式内容。
GET和POST的区别:
1.GET用于获取数据,POST用于提交数据;
2.GET和POST的请求报文格式不同;
3.GET使用请求报文中的首部字段URL传递请求参数,POST使用Request Boby提交数据;
4.GET是幂等且可缓存,POST非幂等且不可缓存;
「幂等」:意思是多次执行相同的操作,结果都是「相同」的。
五、HTTP首部字段
字段名 | 说明 | 示例 |
---|---|---|
Host | 服务器域名 | Host: www.example.com |
Content-Type | 内容类型 | Content-Type: text/html; charset=utf-8 |
Content-Length | 内容长度 | Content-Length: 1024 |
Connection | 连接控制 | Connection: keep-alive |
Accept | 可接受的响应类型 | Accept: application/json |
User-Agent | 客户端信息 | User-Agent: Mozilla/5.0... |
六、HTTP状态码
服务器返回的响应报文中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求后的响应结果。
1XX信息
1XX类状态码属于提示信息,是协议处理中的⼀种中间状态,实际⼯作中使⽤场景⽐较少。
2XX成功
2XX类状态码表示服务器成功处理了客户端的请求。
· 200 OK:最常⻅的成功状态码,表示⼀切正常。
· 204 No Content:常⻅的成功状态码,与200OK基本相同,但响应报⽂没有body数据。
· 206 Partial Content:是应⽤于HTTP分块下载或断点续传,表示响应返回的body数据并不是资源的全部,⽽是其中的⼀部分,也是服务器处理成功的状态。
3XX重定向
3XX类状态码表示客户端请求的资源发送了变动,需要客户端⽤新的URL重新发送请求获取资源,也就是重定向。
· 301 Moved Permanently:表示永久重定向,说明请求的资源已经不存在了,需改⽤新的URL再次访问。
· 302 Found:表示临时重定向,说明请求的资源还在,但暂时需要⽤另⼀个URL来访问。
4XX客户端错误
4XX类状态码表示客户端发送的报⽂有误,服务器⽆法处理。
· 400 Bad Request:表示客户端请求的报⽂有错误。
· 403 Forbidden:表示服务器禁⽌访问资源。
· 404 Not Found:表示请求的资源在服务器上不存在或未找到,所以⽆法提供给客户端。
· 405 Not Allowed:表示服务器不⽀持客户端采⽤的请求⽅式。
5XX服务器错误
5XX类状态码表示客户端请求报⽂正确,但是服务器处理时内部发⽣了错误,属于服务器端的错误码。
· 500 Internal Server Error:服务器发⽣了内部错误。
· 501 Not Implemented:表示客户端请求的功能还不⽀持,类似"即将开业,敬请期待"的意思。
· 502 Bad Gateway:通常是服务器作为⽹关或代理时返回的错误码,表示服务器⾃身⼯作正常,访问后端服务器发⽣了错误。
· 503 Service Unavailable:表示服务器当前很忙(过载),暂时⽆法响应服务器,类似"⽹络服务正忙,请稍后重试"的意思。
七、连接管理
1.长连接和短链接
短连接,每次使⽤HTTP协议进⾏通信,都需要重新按照三次握⼿的⽅式,建⽴⼀个独⽴的TCP连接,响应完毕后,通过四次挥⼿断开连接。
**⻓连接,**只需要建⽴⼀次TCP连接就能进⾏多次HTTP通信,这种⽅减少了TCP连接的重复建⽴和断开所造成的额外开销,减轻了服务器端的负载。
·在HTTP/1.0默认是短连接,,如果需要使⽤⻓连接,则使⽤Connection:Keep-Alive
·从HTTP/1.1默认是⻓连接,如果要断开连接,需要由客户端或者服务器端提出断开,使用Connection:close;
2.管线化链接
将多个HTTP请求(request)整批提交的技术,在传送过程中不需先等待服务端的回应。管线化机 制须通过⻓连接(persistent connection)完成,仅HTTP/1.1⽀持此技术(HTTP/1.0不⽀持)。

八、HTTPS加密
1.HTTP协议存在的问题
HTTP由于使⽤明⽂传输,不安全。所以可能会出现内容被窃听(⽐如被抓包);不验证通信⽅的身 份,通信⽅的身份有可能遭遇伪装(⽐如钓⻥⽹站);⽆法证明报⽂的完整性,报⽂有可能遭篡改(⽐如强制在线⼴告植⼊)
2.什么是HTTPS协议?
HTTPS并不是⼀个新的协议,它使⽤了隧道进⾏通信,让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信。通过使⽤SSL,HTTPS具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。
3.加密方式有哪些?
1.消息摘要加密,例如:MD5、SHA
2.对称式加密:加密和解密使用同一把密钥
优点:加密速度快
缺点:⽆法安全的将密钥传输给发送⽅

3.非对称式加密:两把密钥,公钥加密,私钥解密
优点:可以更安全地将信息传输给通信发送⽅
缺点:运⾏速度慢

4.HTTPS的工作原理
1.⽤户通过浏览器请求https⽹站,服务器收到请求,选择浏览器⽀持的加密和hash算法,返回数
字证书 给浏览器,包含颁发机构、⽹址、公钥、证书有效期等信息;
2.浏览器对证书的内容进⾏校验,如果有问题,则会有⼀个提示警告。否则,就⽣成随机秘钥X,同时使 ⽤证书中的公钥进⾏加密,并且发送给服务器;
3.服务器收到之后,使⽤私钥解密,得到随机秘钥X,然后使⽤随机秘钥x对⽹⻚内容进⾏加密,返回给浏览器;
4.浏览器则使⽤随机秘钥X和之前约定的加密算法进⾏解密,得到最终的⽹⻚内容。
九、总结
HTTP作为Web通信的基石,其报文结构、请求方法、状态码与连接管理等核心机制,不仅是开发者必须掌握的基础知识,更是构建高效、可靠网络应用的关键。随着网络安全威胁日益增多,HTTPS通过引入加密传输与身份验证机制,有效弥补了HTTP在安全性方面的先天不足,已成为现代Web应用中不可或缺的标准配置。深入理解HTTP与HTTPS的工作原理,不仅有助于提升系统性能与用户体验,更是构建安全、可信网络环境的必经之路。希望本文能为你的学习与实践带来切实帮助。