最近,打开官网时大家会发现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。情况二:服务器的问题为什么这么说呢?先看看之前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,做到对项目不断调试与改进,才能开发出完美的应用!