当含有非ASCII字符的cookie请求到来时,ColdFusion 11似乎会崩溃。IIS 8.5返回HTTP 500内部服务器错误(空白页)。
重现步骤:
在Javascript控制台中运行以下内容,并尝试加载任何CFML页面:
document.cookie="a=ñ";
(可选) 请求任何.html或.txt文件并收到正常响应。
请求任何ColdFusion页面并收到一个空白白页,即HTTP 500内部服务器错误。
唯一的解决方法是清除浏览器的cookie。
环境:
- Windows Server 2012 R2标准版
- IIS 8.5
- Cold Fusion 11(标准版)
- 所有操作系统和软件都在运行最新的修补程序版本。
我已尝试将-Dfile.encoding=UTF-8
添加到Java参数中。
<CookieProcessor />
配置应用于context.xml,如其他帖子中建议的那样。我已经发布到Adobe bug base并没有收到回复。
欢迎任何想法。不幸的是,我们有很多用户在cookie中使用“Español”,我们无法执行任何ColdFusion代码来清除或更改它。在升级到ColdFusion 11后,我们没有在QA检查中发现这个问题,但现在出现了。
coldfusion-error.log中的完整异常:
Sep 03, 2015 11:43:58 PM org.apache.coyote.ajp.AjpProcessor process
SEVERE: Error processing request
java.lang.IllegalArgumentException: Control character in cookie value or attribute.
at org.apache.tomcat.util.http.CookieSupport.isHttpSeparator(CookieSupport.java:193)
at org.apache.tomcat.util.http.Cookies.getTokenEndPosition(Cookies.java:502)
at org.apache.tomcat.util.http.Cookies.processCookieHeader(Cookies.java:349)
at org.apache.tomcat.util.http.Cookies.processCookies(Cookies.java:168)
at org.apache.tomcat.util.http.Cookies.getCookieCount(Cookies.java:106)
at org.apache.catalina.connector.CoyoteAdapter.parseSessionCookiesId(CoyoteAdapter.java:986)
at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:743)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:417)
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:199)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)