HTTP 相关知识总结(协议特点、工作流程、请求方法等)
一、HTTP/HTTPS协议基础
1、HTTP/HTTPS协议介绍
作用在应用层的超文本传输协议,允许将超文本标记语言(HTML)文档从WEB服务器传送到客户端的浏览器。
HTTP协议基于TCP/IP四层模型,明文传输,常运行在TCP的80端口。
HTTPS协议,加密传输,常运行在TCP的443端口。
2、核心特点
请求-响应模型:客户端发送一个请求到服务器,服务器接收到请求后给客户端返回一个响应。
无状态协议:服务器不会保留之前客户端请求的任何信息,每一次请求都是独立的。
资源标识符:使用统一资源标识符(URI)来定位互联网上的资源。
方法:多种请求方法,get、put等。
状态码:200、404、503等。
消息头:请求和响应都包含消息头,传递额外信息,如内容类型、编码、认证、缓存等。
版本:HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3。
二、工作机制
建立连接:客户端(浏览器)通过TCP/IP协议与服务器建立连接
发送请求:客户端向服务器发送一个HTTP请求,请求有多个部分组成,包含:请求行(请求方法、请求URI、HTTP版本)、头部字段(Accept可接受的响应内容类型、User-Agent客户端浏览器信息、Referer客户端跳转来源)、正文。
处理请求:服务器收到请求后,解析请求航和头部字段,查找对应的资源,并准备响应。
发送响应:服务器将处理后的响应发送给客户端。响应由多个部分组成,包含:状态行(包含HTTP版本号、状态码、状态短语。例如:404 Not Found)、头部字段(Content-Type响应内容类型、Content-Length响应内容长度、Set-Cookie等)、正文(网页HTML代码)。
关闭链接:请求和响应之后连接关闭,释放资源。HTTP/1.1引入了持久连接,允许在同一个TCP连接上发送和接受多个HTTP请求和响应,提高了网络传输的效率。
三、请求-响应流程
浏览器中输入网址
DNS解析域名,缓存、递归查询,浏览器获得服务器ip地址
浏览器与服务器建立TCP连接(三次握手,四次挥手)
浏览器向服务器发起HTTP请求,发送请求参数到服务器
服务器接收请求后处理,拼好报文,返回内容给浏览器
客户端浏览器根据返回内容渲染页面(获取HTML、CSS、JavaScript等各种资源,渲染模块,构建DOM树,样式计算、布局,生成效果页面)
四、请求方法
根据 HTTP 标准,HTTP 请求可以使用多种请求方法:
HTTP1.0 定义了三种请求方法: GET,POST,HEAD
HTTP1.1 新增了六种请求方法:OPTIONS,PUT,PATCH,DELETE,TRACE,CONNECT
在后续其它版本的 HTTP 协议中,还陆续增加了 MKCOL,COPY,MOVE,LOCK,UNLOCK 等方法
请求方法 | 协议版本 | 说明 |
---|---|---|
GET | 0.9 | 获取资源,可以理解为读取或者下载数据 |
HEAD | 1.0 | 获取资源,和 GET 类似,不返回具体数据,只需要头信息 |
POST | 1.0 | 向服务端提交数据,数据通常交由后端程序处理 |
PUT | 1.1 | 向服务端提交数据,数据直接存储在服务器上 |
PATCH | 1.1 | 对 PUT 方法的补充,用来对已知资源进行局部更新 |
DELETE | 1.1 | 请求服务端删除指定资源 |
CONNECT | 1.1 | 建立一个到服务端的隧道 |
OPTIONS | 1.1 | 请求服务端返回对指定资源支持使用的请求方法 |
TRACE | 1.1 | 追踪请求到达服务器中间经过的代理服务器 |
其中 GET,POST,HEAD,PUT 等为常用的请求方法
五、响应状态码
状态码是一个十进制的数字,以代码的形式表示服务端对请求的处理结果,客户端可以根据此值转换处理状态,比如继续发送请求,切换协议,重定向跳转等,在 RFC 文档中规定的状态码是三位数,所以可用值为000 到 999,但实际上,RFC 把状态码分成了五类,用数字的第一位表示分类,而且仅仅只明确定义了41个状态码。
状态码分类
分类 | 取值范围 | 说明 |
---|---|---|
1** | 100 - 199 | 提示信息,表示服务器收到请求,目前是协议处理的中间状态,需要客户端继续执行操作 |
2** | 200 - 299 | 成功,报文已经收到并被正确处理 |
3** | 300 - 399 | 重定向,资源位置发生变动,需要客户端重新发送请求 |
4** | 400 - 499 | 客户端错误,请求报文有误,服务器无法处理 |
5** | 500 - 599 | 服务器错误,服务器在处理请求时内部发生了错误 |
常用状态码及说明
状态码 | 状态短语 | 说明 |
---|---|---|
200 | OK | 请求成功,一般用于 GET 与 POST 请求 |
301 | Moved Permanently | 永久重定向,客户端请求的资源被移动到新的 URI,返回信息中包含新的 URI,客户端自动请求 |
302 | Found | 临时重定向,其它与 301 相同 |
304 | Not Modified | 自上次访问以来,该资源没有发生更改,客户端直接使用本地缓存 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解,此状态码是一个通用的错误码,并不能准确描述错误 |
401 | Unauthorized | 请求要求用户的身份认证 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求,原因有多样,通常是没有权限 |
404 | Not Found | 服务器上没有找到客户端需要访问的资源 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
502 | Bad Gateway | 服务端网关错误 |
503 | Service Unavailable | 服务器当前很忙,暂时无法响应请求(网络服务正忙,请稍后重试) |
504 | Gateway Time out | 服务端网关超时 |
六、HTTP 与 HTTPS 差异比对
对比项 | HTTP | HTTPS |
---|---|---|
核心机制 | 无加密机制,数据以 明文形式 传输 | 基于 SSL/TLS 协议(如 TLS 1.2/1.3),实现 数据加密、身份验证、完整性校验 |
默认端口 | 使用 80 端口 | 使用 443 端口 |
安全性 | 明文传输,易被中间件(如路由器、黑客工具)窃听、篡改、伪造(“中间人攻击”) | - 加密传输:数据通过对称加密(如 AES)处理,仅收发方持有密钥可解密- 身份验证:依赖 CA 机构(如 Let's Encrypt)颁发的证书,验证服务器真实性,防止 “钓鱼网站”- 完整性校验:通过哈希算法(如 SHA-256)确保数据未被篡改 |
证书 | 无需任何证书 | 必须配置 CA 签发的有效证书(自签证书会被浏览器标记为 “不安全”) |
性能 | 无额外加密 / 解密步骤,性能损耗极低 | 建立连接时需完成 SSL/TLS 握手(协商加密算法、交换密钥),存在轻微性能损耗(但 TLS 1.3 已大幅优化,耗时可忽略) |
浏览器提示 | 无特殊提示(部分浏览器会标记 “未加密”) | 地址栏显示 锁形图标,点击可查看证书信息;若证书无效 / 过期,会弹出 “不安全” 警告,阻止用户访问 |
适用场景 | 仅适合传输 公开、无敏感信息 的内容(如静态博客、公开文档) | 必须用于传输 敏感信息 的场景(如登录页、支付页面、用户隐私数据、电商订单),目前已成为互联网主流协议(浏览器默认优先推荐 HTTPS) |