后端【免费下载链接】psr7PSR-7 HTTP message library项目地址https://gitcode.com/gh_mirrors/ps/psr7点击查看免费下载本文以 CHANGELOG.md 为时间主线系统梳理 PSR-7 HTTP message 库guzzlehttp/psr7从 1.0 到 3.0 的每一次重大演进包括 3.0.0 的破坏性变更与新能力、2.x 系列的多个安全公告GHSA及其修复细节、1.x 时代的基础能力沉淀。通过结合仓库源码如 src/Utils.php、src/Rfc3986.php、src/UriNormalizer.php与测试用例帮助读者理解每个版本为什么改、改了什么、如何迁移并为基于 PSR-7 的 HTTP 客户端与服务端开发提供可落地的升级对照表。版本演进总览三个时代的交接从 CHANGELOG 记录看guzzlehttp/psr7大致经历了三个阶段阶段代表版本主题1.x1.0.02015-05-19→ 1.8.1功能补全PSR-7 全接口、URI 工具、MIME、流处理2.x2.0.02021-06-30→ 2.13.0现代化PSR-17 工厂、类型化、安全加固、弃用铺垫3.x3.0.02026-07-20严苛化原生类型、严格校验、非序列化、行为修正值得注意的是当前 composer.json 中声明require为psr/http-message:^2.0、psr/http-factory:^1.1并provide了psr/http-message-implementation: 2.0与 CHANGELOG 中 3.0.0 的要求完全一致说明仓库当前代码基线即对应 3.0.0 版本。PHP 版本要求为^7.4 || ^8.0同时通过symfony/polyfill-php80与symfony/polyfill-php82保持对旧环境的部分兼容。3.0.0一次以严格校验为核心的破坏性大版本3.0.02026-07-20是 CHANGELOG 中最浓墨重彩的一笔其核心思路是让库的行为更符合 RFC 与 PSR 规范把静默容错改为显式拒绝。Added新增的公开能力DiagnosticValue::escape()转义诊断信息中的控制字符与畸形 UTF-8。查看 src/DiagnosticValue.php 的实现它通过 PCRE 回调把 C0、DEL、C1 控制字符统一渲染为大写\xNN序列当输入为畸形 UTF-8 或 PCRE 失败时退化为逐字节转义escapeBytes()并明确结果仅用于诊断文本不是可逆编码。Exception\TimeoutException为超时的流操作提供专门异常见 src/Exception/TimeoutException.php继承自RuntimeException。它在Utils::copyToStream()、copyToString()、hash()以及Stream的读写中被抛出见 src/Utils.php 中StreamTimeout::read的调用点。Utils::redactUserInfoInString()在文本中脱敏原始 URI 字符串里的 userinfo与已有的Utils::redactUserInfo()src/Utils.php配合避免日志或异常信息泄露凭据。Rfc3986升级为公开 API提供isValid*()系列语法谓词与canonicalizeIpv6()。例如isValidScheme()要求 scheme 以字母开头且仅含[A-Za-z0-9.-]见 src/Rfc3986.phpisValidHost()会拒绝控制字符、空白、/ ? # \、内嵌冒号端口、畸形百分号序列等。UriNormalizer::CANONICALIZE_IPV6_HOST位掩码256被并入PRESERVING_NORMALIZATIONS默认集合见 src/UriNormalizer.php意味着默认归一化也会把 IPv6 主机规范为 RFC 5952 形式。Changed行为修正的六大主题类型与校验收紧要求psr/http-message:^2.0、psr/http-factory:^1.1并全面引入原生参数/返回类型拒绝空数组与非字符串作为 header 值、拒绝非法上传文件树、拒绝缺tmp_name/size/error的上传文件规格、拒绝非整数或负数error值、拒绝负的read()长度、拒绝PumpStream源回调返回空字符串等。流处理修正UploadedFile::moveTo()在复制前会回绕可 seek 的上传流CachingStream::close()幂等化FnStream的 close/detach 变为终态且 close 回调至多调用一次Message::bodySummary()恢复流原始位置并允许null截断长度走默认值默认 120见 src/Message.php。URI 与请求行规范化Uri::getPath()归一化多个前导斜杠authority-less 的fileURI 序列化不再产出不可解析的file://host 校验全面加固分隔符、反斜杠、IPv6、内嵌端口scheme 必须以字母开头Uri::fromParts()校验端口而非强制转换。Host/端口语义为ws/wss引入默认端口 80/443UriComparator::isCrossOrigin()的端口比较使用 ws/wss 默认端口Request::withUri()在 URI 变化或 Host 为空时同步 Host 头Message::toString()合成 Host 时包含 URI 端口见 src/Message.php 的hostHeaderFromUri()。超时与溢出流超时统一抛TimeoutExceptionUtils::copyToStream()在目标流无法前进时抛异常并返回实际复制字节数字节计数或偏移超过PHP_INT_MAX抛OverflowException。multipart 与安全按 RFC 7578 §4.8 停止为multipart/form-data部件添加默认Content-Length转义Content-Disposition参数并拒绝不安全的 boundary 与部件头PHP 8.2 上对含凭据的 URI、server、cookie 参数进行堆栈脱敏#[\SensitiveParameter]见 src/Utils.php 中redactUserInfo()的定义。Removed必须注意的破坏点放弃 PHP 7.2 / 7.3 支持移除ralouphie/getallheaders依赖删除已废弃的Header::normalize()方法。对升级者而言3.0 意味着方法大小写被保留ServerRequest::fromGlobals()除外、header 值必须是字符串、query 构建拒绝非有限浮点数、静态工具类不再可实例化如 src/DiagnosticValue.php 中私有构造函数。这些破坏在 2.11.0 与 2.12.0 中已通过运行期弃用警告做了铺垫属于先警告后强制的标准迁移路径。2.x 系列安全公告与兼容性打磨2.x 的价值在于安全修复密度极高并持续为 3.0 铺路。安全公告GHSA版本公告修复内容2.12.3GHSA-c2w2-prh8-qm98校验 URI host保证getHost()与 URI authority 一致2.12.1GHSA-vm85-hxw5-5432拒绝 HTTP 方法、协议版本与 reason phrase 中的 CR/LF 注入2.10.2GHSA-hq7v-mx3g-29hw拒绝 URI host 组件中的控制与空白字符2.10.2GHSA-34xg-wgjx-8xph拒绝构造请求 URI 时的畸形 Host 值这些公告集中在输入校验方向与 3.0.0 的严格化一脉相承。例如 2.12.2 还增加了 PCRE 失败时显式报错、失败关闭fail closed的策略防止正则回退导致校验被绕过。功能与行为要点2.13.0新增Utils::asciiToLower/asciiToUpper/asciiUcFirst/caselessEquals/caselessContains见 src/Utils.php 顶部实现全部基于strtr做与区域设置无关的 ASCII 大小写折叠这是 2.12.4/2.12.5 中修复区域设置敏感比较的延续——header 名与 host 的比较不再受LC_CTYPE影响。2.11.0Utils::modifyRequest()拒绝在同一调用中同时修改 URI 与显式 Host 头Header::parse()改用无重复前瞻的正则拆分分号参数UriComparator::isCrossOrigin()仅为 HTTP/HTTPS 缺失端口隐式补默认端口。2.10.xUriNormalizer的百分号编码归一化扩展到 fragmentLimitStream::getSize()在切片超出流末尾时返回 0修复CachingStream的无限循环与回放静默损坏问题。2.9.xMultipartStream支持嵌套数组展开Message::bodySummary()修复多字节字符内截断返回null的问题。2.8.x允许空列表作为 header 值修复Uri::withQueryValue()中号被解释为空格的问题2.8.1PHP 8.5 支持2.8.0。2.7.0新增Utils::redactUserInfo()Query::build()支持把布尔编码为 1/0。2.6.x修复 PHP 将数组键中的数字字符串转为 int 的问题StreamWrapper::stream_stat()在内层流 size 为null时返回false。2.5.0psr/http-message约束调整为^1.1 || ^2.0。2.0.0 的基础框架2.0.02021-06-30与 RC 完全相同是 1.x 时代的现代化转折新增 PSR-17 工厂、所有类声明为final、全面引入 PHP 7 类型提示移除 PHP 7.2 支持并删除GuzzleHttp\Psr7命名空间下的全部函数1.7.0 已把它们替换为静态方法。2.1.0 还引入了专用异常MalformedUriException见 src/Exception/MalformedUriException.php它继承自InvalidArgumentException保证向后兼容的同时让URI 畸形可被精确捕获。1.x 时代功能沉淀与历史遗产1.x 记录了 PSR-7 生态早期最有影响力的能力建设许多设计沿用至今1.4.02017-02-21按 RFC 3986 引入大量 URI 工具——Uri::isDefaultPort、Uri::isAbsolute、网络路径引用/绝对路径引用/相对路径引用/同文档引用判断、composeComponents以及UriNormalizer::normalize/isEquivalent、UriResolver::relativize同时把非法 URI 修改从静默容错改为抛异常例如对带 authority 的 URI 设置不以/开头且非空的路径会直接抛错。1.3.x2016补齐ServerRequestInterface、UploadedFileInterface等剩余 PSR-7 接口支持stream_for从标量构造Uri允许继承。1.2.x2015-2016支持无 authority 的 URI、HTTP 451 状态码、0作为文件名、非标准端口进 Host 头CachingStream支持前向 seek。1.1.0URI 可为相对引用multipart/form-data头部大小写不敏感覆盖不再对缺失 scheme 且无端口的 URI 添加端口。1.0.02015-05-19初始发布当时尚未支持ServerRequestInterface与UploadedFileInterface。1.x 时代的另一个遗产是Message::bodySummary()的迭代从 1.5.1 的仅可读时取摘要、1.5.2 的检查 body 大小到 2.4.1 的读取前回绕、2.9.1 的多字节截断安全再到 3.0 的恢复原始位置 null 默认值最终形态集中体现在 src/Message.php。实战指引如何解读与应用本 CHANGELOG升级路径速查从 1.x 升 2.x把命名空间函数调用改写为静态方法如copy_to_stream()→Utils::copyToStream()适配 PSR-17 工厂与final类限制捕获MalformedUriException替代通用异常判断。从 2.x 升 3.0阅读 2.11.0/2.12.0 的Deprecated清单——凡在 2.x 中被标记弃用的传参非字符串 header 值、空 header 数组、非字符串 query 值、非有限浮点数、依赖自动大写的请求方法、非法 URI scheme 等在 3.0 都会被直接拒绝确认 PHP 版本 ≥ 7.4 且psr/http-message为^2.0。关注安全补丁升级到 2.12.3或直接 3.0.0可覆盖 GHSA-c2w2-prh8-qm98、GHSA-vm85-hxw5-5432、GHSA-hq7v-mx3g-29hw、GHSA-34xg-wgjx-8xph 四项公告涉及的校验问题。在源码中验证版本行为想确认 3.0 的 Host 同步逻辑可查看 src/Message.php 中toString()与hostHeaderFromUri()想确认超时异常链路可追踪 src/Utils.php 中copyToStream()/hash()里的StreamTimeout::read调用与TimeoutException的抛出点想确认 URI 严格校验可阅读 src/Rfc3986.php 的isValidScheme()/isValidHost()/isValidPort()与 src/UriNormalizer.php 的常量位掩码定义对应的行为均有测试覆盖例如 tests/DiagnosticValueTest.php、tests/UtilsTest.php、tests/UriNormalizerTest.php可用composer test或仓库 Makefile 中的测试目标在本地验证。小结guzzlehttp/psr7的 CHANGELOG 是一部浓缩的 PHP HTTP 生态演进史1.x 补齐能力2.x 奠定现代化与安全基线3.0.0 则以拒绝含糊、拒绝注入、拒绝非法输入的姿态完成收束。对使用方而言最大的价值不在于逐条记忆变更而在于识别出三条主线——输入校验严格化、区域设置无关化ASCII case folding、超时与溢出显式化——它们既是每次安全公告的根源也是 3.0 迁移时最需要自查的检查清单。升级时对照本文的版本速查表逐项排查即可平稳完成从 1.x/2.x 到 3.0 的过渡。赞分享后端【免费下载链接】psr7PSR-7 HTTP message library项目地址https://gitcode.com/gh_mirrors/ps/psr7点击查看免费下载相关推荐TinyMCE CHANGELOG 深度解读从 4.1 到 8.8 的版本演进、API 变更与安全加固全解析TinyMCE CHANGELOG 深度解读从 4.1 到 8.8 的版本演进、API 变更与安全加固全解析 本文以 modules/tinymce/CHAN前端富文本UI组件Consul CHANGELOG 深度解读从 2.0.4 看安全加固、配置演进与升级运维要点Consul CHANGELOG 深度解读从 2.0.4 看安全加固、配置演进与升级运维要点 Consul 仓库根目录的 CHANGELOG.md https服务网格服务注册发现API网关健康检查微服务Gson 版本演进全解析从 1.0 到 2.10 的 CHANGELOG 深度解读Gson 版本演进全解析从 1.0 到 2.10 的 CHANGELOG 深度解读 Gson 是 Google 开源的 Java 序列化/反序列化库用于在后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
独立开发者的个人所得税与经营所得税合规申报:个税APP实操 独立开发者的个人所得税与经营所得税合规申报:个税APP实操在独立产品商业化变现并获得持续现金流入后,摆在每一位全栈独立开发者面前最严肃、也最不可回避的法律义务就是:“国家税务合规与个人所得税/经营所得税申报(Tax Complian… · 2026/9/27 8:06:46
个人买域名有什么用?小白建站最佳实践指南 个人买域名有什么用?小白建站最佳实践指南 自己不会代码却想做一个个人网站,这是很多技术新手最初的念头。别被“开发”两个字吓退,现在的建站门槛已经低到令人发指。我见过太多人因为纠结“买域名到底有什么用”而卡在第一步,结果白白浪费了半年的黄金期… · 2026/9/27 8:06:46
【零基础学智能仿真-30】二维有限元的形函数与数值积分:从三角形到四边形 课程摘要 上一节用一维杆说明了弱形式如何产生单元方程。本节走进二维:先用三节点三角形单元推导形函数、雅可比矩阵和应变矩阵,再用一个线性位移场检验计算结果;随后以四节点矩形单元比较单点积分与 \(2\times2\) 高斯积分。通过两个可核对的小实验,理解“怎样描述单元内的… · 2026/9/27 8:06:46
STM32消防预警系统:多源融合与失效安全设计实战 1. 这不是玩具,是实验室里真能救命的嵌入式系统我第一次把这套STM32消防预警控制系统部署到学院电子实验室时,没敢直接通电——先用万用表测了三遍电源轨,又盯着Wokwi仿真波形看了二十分钟,确认DHT11温湿度传感器启动时序、MQ-2烟… · 2026/9/27 10:15:15
ESP32编译优化-O2导致崩溃的原因与排查指南 把ESP32的编译优化等级从默认的调试模式改成-O2,原本运行得好好的程序突然重启、死机、串口刷乱码——这几乎是每个嵌入式开发者都会撞上的经典场面。我第一次遇到时也以为是工具链出了问题,翻遍了启动日志,查了半天硬件连接,最后才发现问题根… · 2026/9/27 10:15:09
嵌入式C++第一行代码:裸机环境下可运行的cpp_main实现 1. 这不是C入门课,是嵌入式系统里“动真格”的第一行代码你点开这个标题,大概率刚刷完三篇STM32 C教程——讲HAL库封装的、谈RAII在裸机中怎么模拟的、甚至还有人用模板元编程推导定时器重载周期的。但合上页面,手悬在键盘上:IDE里… · 2026/9/27 10:14:38
MiBeeNvr v0.13.0:存储路径自主权与动态通道管理技术解析 1. 项目概述:这不只是个NVR版本更新,而是一次存储控制权的下放MiBeeNvr v0.13.0 正式版预告里那句“录像存哪、接多少路,都归你管”,听起来像一句口号,但实际拆开看,它精准戳中了中小型视频监控系统部署中最… · 2026/9/27 10:14:38
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01