ColdFusion 2023中无法复现的“Cannot create a session after the response has been committed”异常排查求助
我多年来一直碰到这个错误,但始终没找到头绪。试过各种论坛上的方案,现在都记不清到底试了多少种了,所以想来问问更精准的解决思路。
我们当前运行的是ColdFusion 2023,已经安装了截至2025年2月16日的所有最新更新。
最近一次触发错误的请求,HTTP_User_Agent是Custom-AsyncHttpClient,对应的Query_String为:request=/hello.world&%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input
有意思的是,当我手动运行完全相同的查询字符串时,得到的是预期结果——会通过301重定向跳转到新页面,完全没法复现那个返回ColdFusion提示“Cannot create a session after the response has been committed”的Java错误。
更奇怪的是,这个错误的Stack Trace是空的,只有错误消息和类型,CGI转储也只给出了我上面列出的那些信息。
我已经把问题范围缩小到几行代码了:
首先,我们的web.config里有一条重写规则,用来处理我们所谓的虚拟目录:
<action type="Rewrite" url="urlResolve.cfm?request={URL}" />
然后是处理文件中的代码,据我观察,错误应该出在下面这段:
<cfset variables.originalRequest = url.request> <CFIF right(url.request,'1') NEQ '/' AND FindNoCase('index.cfm',url.request) EQ 0> <!---<cflocation url="#url.request#/" statuscode="301" addtoken="no">---> <CFIF right(url.request,'1') NEQ '/'> <cfset url.request = url.request & '/'> <cflocation url="#url.request#" statuscode="301" addtoken="no"> </CFIF> </CFIF>
我们的系统要求所有请求都带尾部斜杠“/”,所以才做了这个301重定向。
正常情况下,处理重定向时会捕获问题并做出响应,但这次的情况是,代码根本没走到那一步就报错了。
目前我们猜测是爬虫导致的——它们发起请求后,在服务器返回内容前就关闭了连接。因为系统没有被入侵的迹象,也没出现其他异常错误。
但这个问题已经快把我们逼疯了,真心希望能找到更可行的解决方案。
任何建议我们都万分感激!
谢谢
备注:内容来源于stack exchange,提问作者Archer1980

