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

相关推荐
lendsomething12 小时前
解决SSL握手失败问题:SSLHandshakeException: Received fatal alert: handshake_failure
网络·网络协议·ssl
bestcxx13 小时前
(二十六)、Kuboard 部署网络问题 &k8s 使用本地镜像 & k8s使用 register本地镜像站 综合应用
网络·容器·kubernetes
红米饭配南瓜汤14 小时前
WebRTC 发送端 SSRC 生成流程总结
网络·网络协议·音视频·webrtc·媒体
H3C-Navigator15 小时前
RPC在分布式存储系统中的应用
分布式·网络协议·rpc
DIY机器人工房15 小时前
NAT 模式、命令行版、桥接模式方式给ubuntu虚拟机配网步骤:
linux·网络协议·ubuntu·嵌入式·桥接模式·diy机器人工房
老坛程序员15 小时前
抓包解析MCP协议:基于JSON-RPC的MCP host与MCP server的交互
人工智能·网络协议·rpc·json·交互
wanhengidc17 小时前
云手机和网盘之间的关系
网络·游戏·智能手机·架构·云计算
歪歪10019 小时前
Http与WebSocket网络通信协议的对比
网络·websocket·网络协议·计算机网络·http·网络安全·信息与通信
ningmengjing_19 小时前
爬虫逆向——RPC技术
网络·网络协议·rpc
David WangYang20 小时前
便宜的自制 30 MHz - 6 GHz 矢量网络分析仪
开发语言·网络·php