1. 什么是 HTTP 协议

  • 全称Hyper Text Transfer Protocol(超文本传输协议)

  • 作用:用于在服务器客户端(通常是浏览器)之间传输超文本数据(如文字、图片、视频、音频)的应用层协议

  • 工作模式:HTTP 是一个双向协议,基于经典的客户端-服务器架构(B/S架构)进行工作。通信流程是:浏览器(客户端)发送请求(Request)给服务器,服务器处理请求后,向浏览器返回响应(Response)

2. HTTP 协议通信过程

HTTP 本身不负责传输,它依赖于下层的 TCP 协议(默认端口 80)来建立可靠连接。

http 协议通信过程包括如下步骤:
1.当用户发起一个新的请求;

2.浏览器发起对服务器的 TCP 连接请求;

3.服务器与浏览器之间会按照 TCP 协议的三次握手,建立之间的 TCP 连接;

4.浏览器按照 http 协议格式,创建请求数据包( http 请求报文)

5.将请求数据包( http 请求报文)发送至服务器;

6.服务器按照 http 协议格式,解析请求报文;

7.执行请求处理,调用相关业务逻辑方法,产生响应数据;

8.服务器按照 http 协议格式,将响应数据封装至响应数据包( http 响应报文)

9.服务器将响应数据包,发送至浏览器

10.浏览器按照 http 协议格式,对响应数据包进行解析;11.浏览器将响应数据包中的响应内容,显示至浏览器页面,呈现给用户;

3. URL - 如何定位资源?

HTTP 协议使用 URL(统一资源定位符)来指明要访问的网络资源。

  • 格式http://host[:port][abs_path]

  • 示例:http//192.168.0.116:8080/index.html
    • http:协议类型。

    • host:服务器的主机域名或 IP 地址(如 www.example.com 或 192.168.1.1)。

    • port:端口号,可选(省略时使用默认端口 80)。

    • abs_path:资源的路径(如 /index.html)。

  • URL 与 URI 的关系

    • URI(统一资源标识符)是一个更广泛的概念,用于标识一个资源。

    • URL(统一资源定位符)是 URI 的子集,不仅标识了资源,还提供了定位(找到)该资源的方式

    • 另一个子集是 URN(统一资源名称),它只定义资源名称而不提供定位方式(例如 urn:isbn:0451450523 只告诉我们有一本书,但没告诉我们去哪找)。

4.HTTP报文

4.1.请求报文

  1. 请求行(Request Line):包含请求方法(如GET/POST)、请求的URLHTTP协议版本

    • 示例:GET /index.html HTTP/1.1

  2. 请求头(Request Headers):包含若干行首部字段,以键值对形式传递附加信息(如客户端类型、接受的数据格式等)。

    • 示例:Host: www.example.comUser-Agent: Chrome/...

  3. 空行:用于分隔头部和主体。

  4. 请求体(Request Body):可选部分,通常用于 POST 或 PUT 等方法,存放要提交给服务器的数据(如表单数据、JSON等)。GET 请求没有请求体

4.2响应报文

  1. 状态行(Status Line):包含HTTP协议版本状态码状态描述

    • 示例:HTTP/1.1 200 OK

  2. 响应头(Response Headers):包含若干行首部字段,以键值对形式传递关于响应的附加信息(如服务器类型、内容类型、内容长度等)。

    • 示例:Content-Type: text/htmlContent-Length: 1024

  3. 空行:用于分隔头部和主体。

  4. 响应体(Response Body):服务器返回的实际内容(如请求的HTML文档、图片数据等)。

5.请求方式

定义了对资源要执行的操作。最常用的两种是 GET 和 POST

方法描述特点
GET获取资源。参数通过URL传递(在请求头中),有长度限制,幂等(多次执行结果相同),可被缓存。
POST提交/增加数据。参数放在请求体中,更安全,无长度限制,不幂等(多次提交可能产生不同结果)。
HEAD获取资源的响应头,不返回响应体。用于检查资源是否存在、是否被修改等。
PUT修改/替换资源。将数据体内容保存到请求URL指定位置。幂等
DELETE删除指定资源。幂等
OPTIONS查询服务器对指定URL支持的请求方法返回 Allow: GET, POST, HEAD...等请求方式的内容

GET和POST的区别:

  1. 用途不同:GET 主要用于获取数据,POST 主要用于提交数据

  2. 请求报文格式不同

    • GET 方法请求报文第一行格式为:GET /URL HTTP/1.1 \r\n

    • POST 方法请求报文第一行格式为:POST /URL HTTP/1.1 \r\n

  3. 参数位置不同:GET 通过 URL 的查询字符串(Query String) 传递参数,POST 通过请求体(Request Body) 提交数据。

  4. 特性不同

    • GET 是幂等的且可缓存

    • POST 是非幂等的且不可缓存

    • 幂等:指多次执行相同的操作,结果都是相同的。

6.HTTP首部字段

  • 通用类

    • Connection: keep-alive:客户端要求服务器使用长连接,以便复用TCP连接。

  • 请求头(Client -> Server)

    • Host: www.example.com必须的字段,指定请求的目标服务器域名。

    • Accept: text/html:告诉服务器客户端能处理哪些类型的响应内容。

    • Accept-Encoding: gzip:告诉服务器客户端支持哪些压缩格式

  • 响应头(Server -> Client)

    • Content-Type: text/html; charset=utf-8极其重要,告诉客户端响应体的媒体类型(MIME type)字符编码。浏览器据此决定如何解析内容。

    • Content-Length: 1000:指明响应体的长度(字节数)。

    • Content-Encoding: gzip:说明响应体使用的压缩格式(与Accept-Encoding对应)

7.HTTP状态码

分类含义常见状态码
1xx信息性状态码表示请求已被接受,需要继续处理。(不常见)
2xx成功200 OK:请求成功。
204 No Content:成功,但无内容返回。
3xx重定向301 Moved Permanently永久重定向。
302 Found临时重定向。
4xx客户端错误

400 Bad Request:请求报文有语法错误。
403 Forbidden:服务器拒绝访问(权限不足)。
404 Not Found:请求的资源在服务器上不存在。

5xx服务器错误500 Internal Server Error:服务器内部错误。
502 Bad Gateway:网关/代理错误,后端服务器无响应。
503 Service Unavailable:服务器当前忙,暂时无法处理请求。

8.HTTP加密

8.1HTTP协议存在的问题

HTTP 由于使用明文传输,所以存在以下安全问题:

  • 使用明文进行通信,内容可能会被窃听,比如被抓包;

  • 不验证通信方的身份,通信方的身份有可能遭遇伪装,比如钓鱼网站;

  • 无法证明报文的完整性,报文有可能遭篡改,比如强制在线广告植入。

8.2什么是HTTPS协议

HTTPS 并不是一个新的协议,它使用了隧道进行通信, 让 HTTP 先和 SSL (Secure Sockets Layer) 通信,再由 SSL 和 TCP 通信。通过使用 SSL , HTTPS 实现了加密 (防窃听) 、认证 (防伪装) 和完整性保护 (防篡改) 。

8.3HTTP和HTTPS有哪些区别?

  1. HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。 HTTPS 则解决 HTTP ”不安全的缺陷, 在 TCP 和 HTTP 网络层之间加入了 SSL 安全协议,使得报文能够加密传输。

  2. HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL 的握手过程,才可进入加密报文传输。

  3. HTTP的端口号是80,HTTPS的端口号是443.

  4. HTTPS协议需要CA申请数字整数,来保证服务器的身份是可信的。

8.4加密方式

8.4.1对称密钥加密

对称密钥加密 ( Symmetric-Key Encryption ) ,加密和解密使用同一密钥。

  • 优点: 运算速度快;

  • 缺点: 无法安全地将密钥传输给通信方。

8.4.2飞非对称密钥加密

非对称密钥加密,又称公开密钥加密 ( Public-Key Encryption ) ,加密和解密使用不同的密钥。

公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。

非对称密钥除了用来加密,还可以用来进行签名。因为私有密钥无法被其他人获取,因此通信发送方使用其私有密钥进行签名,通信接收方使用发送方的公开密钥对签名进行解密,就能判断这个签名是否正确。

  • 优点: 可以更安全地将公开密钥传输给通信发送方;

  • 缺点: 运算速度慢。

8.5. HTTPS的工作原理

  1. 用户通过浏览器请求 https 网站,服务器收到请求,选择浏览器支持的加密和 hash 算法,同时返回数字证书给浏览器,包含颁发机构、网址、公钥、证书有效期等信息。

  2. 浏览器对证书的内容进行校验,如果有问题,则会有一个提示警告。否则,就生成随机密钥 X ,同时使用证书中的公钥进行加密,并且发送给服务器。

  3. 服务器收到之后,使用私钥解密,得到随机密钥 X ,然后使用随机密钥 X 对网页内容进行加密,返回给浏览器。

  4. 浏览器则使用随机密钥 X 和之前约定的加密算法进行解密,得到最终的网页内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94008.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94008.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94008.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bee1.17.25更新Bug,完善功能.不支持NOSQL,分库分表Sharding(2.X版有)

Bee 1.17.25 正常的ORM功能都有,但不支持NOSQL, 分库分表Sharding; 若需要可使用2.X版. Bee, 接口简单,功能齐全,性能好,支持原生分页性能更高;还有分库分表 (Sharding 分片) 功能,也支持 MongoDB ORM. Bee Hiberna…

RAG流程全解析:从数据到精准答案

Rag流程分析第一部分:数据处理与向量化 原始文档进入系统,先经过格式识别,把 pdf、docx、pptx、扫描图片等统一转成文字流。文字流丢进分段器,按固定长度或语义边界切成若干文本块,每个块再生成唯一 id。如果文档里有表…

Matplotlib数据可视化实战:Matplotlib图表注释与美化入门

图表注释与标签:提升数据可视化效果 学习目标 通过本课程的学习,学员将掌握如何使用Matplotlib在图表中添加文本注释、图例、标题和轴标签,从而提高图表的可读性和信息传达能力。本课程将通过实际案例,帮助学员理解每个元素的作用…

GitLab 安全漏洞 CVE-2025-7739 解决方案

本分分享极狐GitLab 补丁版本 18.2.2, 18.1.4, 18.0.6 的详细内容。这几个版本包含重要的缺陷和安全修复代码,我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS,技术团队已经进行了升级,无需用户采取任何…

C端高并发项目都有哪些

C端(用户端)高并发项目通常涉及大规模用户直接访问的服务,其核心挑战是如何在海量用户同时请求下,保证系统的稳定性、高性能、高可用和一致性。以下是一些典型的C端高并发项目类型和具体案例:​核心类型与典型案例&…

OSCP - Proving Grounds - Shenzi

主要知识点 路径爆破小技巧 windows AlwaysInstallElevated 提权 具体步骤 依旧是nmap开始,其中80/443/139/445端口值得关注一下 Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-01 15:06 UTC Nmap scan report for 192.168.53.55 Host is up (0.0008…

结合BI多维度异常分析(日期-> 商家/渠道->日期(商家/渠道))

技术手段: BI工具(finereport )、python、sql 数据更新: 每日零点更新数据。(独立开发) 商业智能分析平台 | Python/FineReport/SQLAlchemy 项目描述 业务价值 :解决原有系统无法快速定位佣金异…

计算机毕设Spark项目实战:基于大数据技术的就业数据分析系统Django+Vue开发指南

🎓 作者:计算机毕设小月哥 | 软件开发专家 🖥️ 简介:8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 🛠️ 专业服务 🛠️ 需求定制化开发源码提…

如何让FastAPI任务系统在失败时自动告警并自我修复?

url: /posts/2f104637ecc916e906c002fa79ab8c80/ title: 如何让FastAPI任务系统在失败时自动告警并自我修复? date: 2025-08-20T08:18:42+08:00 lastmod: 2025-08-20T08:18:42+08:00 author: cmdragon summary: FastAPI 和 Celery 结合提供了强大的异步任务处理能力,但在分布…

Gitee仓库 日常操作详细步骤

新建仓库 → 上传代码 步骤1、打开Gitee仓库网站:开源软件 - Gitee.com 步骤2、点击右上角加号 点击新建仓库。 步骤3、设置仓库名 ,选择是否开源 ,点击创建。 步骤4、记住远程仓库URL 步骤5、本地新建文件夹,然后进行上传代码…

Python采集易贝(eBay)商品详情API接口,json数据返回

Python采集易贝(eBay)商品详情API接口要采集eBay商品详情,你可以使用eBay官方提供的API。以下是使用Python通过eBay Finding API获取商品详情的完整示例:准备工作注册账号并获取API密钥:选择适合的API(如Finding API、Shopping AP…

如何将任意文件一键转为PDF?

无论你用什么软件打开文件(Word、Excel、网页、CAD图纸、图片等),只要能打印,就可以通过虚拟打印机将其转为PDF,确保对方收到的文件看起来和你看到的一模一样。它是小巧实用的PDF虚拟打印工具,采用安装包形…

迁移学习+多模态融合破解跨域难题,解锁视觉感知新范式

在近期的顶会顶刊中,迁移学习与多模态融合的热度居高不下,相关成果频出,部分模型在特定任务里性能提升极为显著。登上顶刊 TPAMI 2025 的某篇研究,借助语言引导的关系迁移,大幅提升了少样本类增量学习中模型的泛化能力…

C语言---分隔符、常量、注释、标识符、关键字、空格

文章目录分隔符注释注意标识符标识符的定义标识符的命名要求合法与非法标识符示例关键字关键字定义关键字一览(按功能分类)空格一、空格的作用:分隔令牌 (Tokens)空格的使用场景必须用空格分隔的情况不能有空格的情况分隔符 分隔符名称主要用途;分号语句结束符,逗号…

创建Vue项目的不同方式及项目规范化配置

1 项目的创建与运行 1.1 基于webpack构建工具——vue-cli脚手架 1. 安装脚手架 :npm i -g vue/cli # 安装一次即可,之前安装过则无需重复安装 2. 切换到项目所在目录 :cd 项目所在目录 3. 创建项目 :vue create 项目名 4. 自定…

K距离间隔重排字符串 (LeetCode 358) — Swift解法 + 可运行Demo

文章目录摘要描述解决方法分析问题和解决代码代码要点详解示例测试和结果时间复杂度空间复杂度总结摘要 这道题的核心是:把字符串里的字符重新排一下顺序,让相同字符之间至少隔开 k 个位置。如果做不到,就返回空串。看上去像“排座位”&…

React native Navigation 详解

Tab Navigator(标签导航器) 概念 Tab Navigator 是 React Navigation 中用于创建底部或顶部标签栏导航的组件。它允许用户在不同的屏幕之间快速切换,每个标签对应一个独立的屏幕。 基本用法 import {createBottomTabNavigator } from @react-navigation/bottom-tabs; im…

[GraphRAG]完全自动化处理任何文档为向量知识图谱:AbutionGraph如何让知识自动“活”起来?

在当今信息爆炸的时代,企业和研究人员面对大量非结构化文档时,如何高效地提取、存储和查询其中的知识,已成为一个核心挑战。传统的关键词检索早已无法满足深层次语义关联和智能问答的需求。 每天面对成百上千份PDF论文、Excel报告、行业白皮…

模拟tomcat接收GET、POST请求

访问: http://localhost:10086/mytomcatMyTomcat/ └── src/└── com/└── zhang/├── MyServer.java├── MyRequest.java├── MyResponse.java├── MyMapping.java├── MyServlet.java└── MyHttpServlet.java核心类功能说明 MyServer.java 服务…

氯化钇:科技与高性能材料的核心元素

氯化钇是钇元素的氯化物,广泛应用于高性能材料、催化剂、光电技术等领域。作为稀土元素之一,钇因其独特的物理和化学特性,在现代工业中具有重要地位,而氯化钇则是其中的关键化合物之一。氯化钇的优势与特点1. 化学稳定性强氯化钇具…