#开发体验#关于从2月至4月来net::ERR_HTTP2_PROTOCOL_ERROR引起的网站断联问题
Developer_Ni | 2025-04-12 13:31:411人👁浏览CodeCMS的测试网站自从2月的一次小更新之后,出现了无法与数据库交互的Bug。 在开发人员的努力Debug下,我们对这个毁天灭地的问题有了初步的了解与对策。 程序猿老秃:现在这个问题正在解决中... # 问题描述 最近,打开官网时大家会发现index.php本来输出帖子的地方和检测用户Cookie的地方会显示 ```https://.........无法打开,因为 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服务器环境行测试,使用(https://codecraft.czlj.net/data/backup/v0.2.zip)[https://codecraft.czlj.net/data/backup/v0.2.zip] 的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错误有两个可能的原因: ·1 v0.2更新的BBS.php查询量超过限制 ·2 虚拟主机文件根目录设置问题 ## 我们的对策是这样的 ·针对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,做到对项目不断调试与改进,才能开发出完美的应用!*