找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 80|回复: 1

[CodeCMS-Web大项目]系列EP2-4:毁天灭地的BugHTTP2ERROR-官方消息(转载自代码工艺)

[复制链接]

18

主题

85

回帖

1414

积分

管理员

积分
1414

一周年纪念

发表于 2025-4-12 13:57:22 | 显示全部楼层 |阅读模式
[CodeCMS-Web大项目]系列EP2-4:毁天灭地的BugHTTP2ERROR-官方消息(转载自代码工艺)
关于从2月至4月来net::ERR_HTTP2_PROTOCOL_ERROR引起的网站断联问题

(注:EP2-1~2-3关于CodeCMSv0.2的更新的技术细节与文档帖还没写好)
(原文链接,待Bug修改完之后失效,更多信息plz visithttps://codecraft.czlj.net)

Developer_Ni | 2025-04-12 13:31:41
CodeCMS的测试网站自从2月的一次小更新之后,出现了无法与数据库交互的Bug。
在开发人员的努力Debug下,我们对这个毁天灭地的问题有了初步的了解与对策。

程序猿老秃:现在这个问题正在解决中...
问题描述
最近,打开官网时大家会发现index.php本来输出帖子的地方和检测用户Cookie的地方会显示
  •    net::ERR_HTTP2_PROTOCOL_ERROR
根据相关资料,net::ERR_HTTP2_PROTOCOL_ERROR产生的原因有很多
一种是因为网页需要从服务器获取的信息超过了服务器的Web服务器程序(如Apache,Nginx)配置的—最大缓存上限—(这是HTTP/2.0快速传输技术的特色之一),导致服务器程序返回这个报错信息;
二是PHP脚本与数据库等程序交互响应时间 —超过php设置的最大时限导致返回该报错;—
我们对问题的猜测情况一:v0.2最后一次更新的代码问题
2月底时,CodeCMS的首页显示帖子的功能是通过v0.2版本下/application/db_api/BBS.php脚本实现的。
该脚本会显示标题、链接和梗概
首先回顾一下:在此次小更新前的版本里,存储文章的表格中有标题,作者,浏览量,内容,梗概
!发帖时,梗概栏允许留空,若留空,存进数据库的帖子的梗概列里值为SYS_AUTO_RESUME,BBS.php脚本输出时如果检测到SYS_AUTO_RESUME这个特殊值,则输出的梗概为帖子前50个字。
!!!这样的话,脚本必须知道帖子的内容才能输出前50个字,所以v0.2版的BBS.php会查询所有帖子数据。
这就是问题所在之一:如果数据库里的数据过多,BBS.php脚本查询的时间就会变长如果这个时间超过了我们服务器PHP配置的最大查询时间,这将导致查询失败,服务器返回net::ERR_HTTP2_PROTOCOL_ERROR。
值得注意的是, 我们在本地电脑上搭建了phpstudy这样的Web服务器环境行测试,使用([url=https://codecraft.czlj.net/data/backup/v0.2.zip)[https://codecraft.czlj.net/data/backup/v0.2.zip]https://codecraft.czlj.net/data/backup/v0.2.zip)[https://codecraft.czlj.net/data/backup/v0.2.zip[/url]]
的CodeCMS v0.2版本的源码并没有出现这个HTTP2ERROR,—我们对php配置的查询时间限制远远大于正常时限—,这更能说明该因素的可能性。
(注:CodeCraft官方目前使用的是某某云虚拟主机,无法修改php配置,所以这种情况难以从服务器环境入手解决)
情况二:服务器的问题
为什么这么说呢?先看看之前v0.2的文件目录树:
<根目录>/[-] ━━📖application[-]━━📖db_api[-]━━📝db.php//数据库连接api
│ ┝━━━📝BBS.php//论坛页面
┊ ┝━━━📝submit_post.php//提交帖子api
┊ ┝━━━📝view_post.php//查看帖子详情页面
┊ ┝━━━📝sign-in-up.php//登录注册api
┊ ┝━━━📝YummyCookie.php//用户cookie库,含设置、检
┊ ┊ 查用户cookie的功能代码
┊ ┕━━━📝tasteCookie.php//主页识别用户信息的脚本
┝━━━📖data[-]……
┝━━━📝editor.html//发帖前端
┝━━━📝viewer.php//看帖前端
┕━━━📝index.php//主页前端
其中,index.php嵌套了/application/db_api/下的BBS.php和tasteCookie.php,viewer.php嵌套了submit_postphp,然而这样链接嵌套页面的布局在3月之后突然不能正常工作了,(现象就是,无论我们如何嵌套,/application/db_api下的api脚本就是无法调用到,总是显示http2错误)
我们怀疑有极小的可能性是某某云虚拟主机的文件根目录设置错误了, 导致连接路径“/application/”链接到了整个服务器的根目录(像是C:/这种磁盘的根根根根目录)去了又因为找不到文件所以返回该报错。
归纳与对策
总之,这次的HTTP2错误有两个可能的原因:
  • v0.2更新的BBS.php查询量超过限制
  • 虚拟主机文件根目录设置问题
我们的对策是这样的
·针对1,我们把BBS.php通过查询帖子的文章内容输出帖子梗概的功能暂时关闭了,同时关闭了tasteCookie.php防止每次上线都要检测用户信息
·针对2,我们调整了整个CMS的目录结构,把/application/db_api/下的所有脚本api放在了根目录下(也就是说index.php等调用的api与之在同一级目录下),经测试这样没有再出现http2ERROR报错。文件目录树变成了这样:
<根目录>/[-]📝db.php📝BBS.php📝submit_post…..📝index.php📝viewer.php📝deitor.php
(就是所有文件都在同一级目录下了)
总结
此次bug涉及的技术原理广泛、问题难以排查,目前对问题的原因分析并未完成,而调整目录、削减功能等对策也是缓兵之计,数据库文档的安全性无法保障,用户可以从根目录直接访问得到数据库敏感信息,不法分子可能对网站造成威胁…等等。
我们会不断调查这个问题,在该Bug修复之前,CodeCMS不会再发布发行版,对此我们深感歉意!在此,再次提醒我们团队自身以及各位极客、开发人员——程序猿与Bug的战争从未结束,开发不息,Bug不止。勤DEBUG,做到对项目不断调试与改进,才能开发出完美的应用!









来自圈子: 计算机网络技术学习圈

点评

Gitee上可以搜到该项目的开源存储库  发表于 2025-4-12 15:58
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|CZLJ

GMT+8, 2025-4-26 17:37 , Processed in 0.056406 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表