HTTP 协议:从原理到应用的深度剖析

一、什么是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的工作原理,不仅有助于提升系统性能与用户体验,更是构建安全、可信网络环境的必经之路。希望本文能为你的学习与实践带来切实帮助。

相关推荐
凉伊6 小时前
TCP协议核心机制详解:握手、挥手、可靠传输与拥塞控制
网络·网络协议·tcp
fatiaozhang95277 小时前
中国移动浪潮云电脑CD1000-系统全分区备份包-可瑞芯微工具刷机-可救砖
android·网络·电脑·电视盒子·刷机固件·机顶盒刷机
jyhappy1238 小时前
USB系统学习笔记 - 从概念到抓包解析
网络
青草地溪水旁8 小时前
互联网接入网中PPPoE和PPP协议
网络·ppp·接入网
wanhengidc10 小时前
什么是云手机?
运维·网络·安全·游戏·智能手机
机器人梦想家10 小时前
pymodbus启动一个简单的modbus tcp server
网络·网络协议·tcp/ip
一刀到底21110 小时前
springboot3.3.5 集成elasticsearch8.12.2 ssl 通过 SSL bundle name 来实现
网络·elasticsearch·ssl·springboot3
m0_6613162310 小时前
modbus_tcp和modbus_rtu对比&移植AT-socket,modbus_tcp&杂记
服务器·网络·tcp/ip
小鸟啄米10 小时前
Elixir通过Onvif协议控制IP摄像机,ExOnvif库给视频流叠加字符
网络协议·elixir·onvif