对于一个特殊的项目,我选择编写自己的微型 Web 服务器,使用 .Net 框架(HttpListener 类)实际上很容易。
直到昨天我开始使用 Internet Explorer 进行测试时,一切都运行良好。
我的服务器因任何 ie 请求而不断崩溃!我终于设法找出原因:即口吃!(至少 ie7 和 ie8,我还没有尝试过其他版本)。
FireFox、Chrome 和 Opera 都不会出现这个问题。
更具体地说,我在网页中使用动态 javascript 插入来绕过跨域调用场景中的同源策略。该脚本向我的微型服务器生成一个请求。假设构建的请求是:
http://localhost:8081/myService?p1=A,p2=B,p3=C,p4=D,p5=E
使用 FFox、Chrome 或 Opera,我的服务器确实会收到来自浏览器的单个请求:
http://localhost:8081/myService?p1=A,p2=B,p3=C,p4=D,p5=E
即,我的服务器会收到随机数量的部分请求,例如:
http://localhost:8081/myService?p1=A,
http://localhost:8081/myService?p1=A,p2=B,
http://localhost:8081/myService?p1=A,p2=B,p3=C,
http://localhost:8081/myService?p1=A,p2=B,p3=C,p4=D,
(事实上很多,因为我有 20 个左右的参数......)
最后:
http://localhost:8081/myService?p1=A,p2=B,p3=C,p4=D,p5=E
这基本上没什么大不了的,因为我的逻辑能够处理缺少参数的情况。问题是每个不完整的请求实际上都会关闭连接(错误 1229)。这使试图响应每个请求的服务器崩溃。修复很简单,但我仍然不喜欢服务器充斥着那些中间“无法回答”并因此无用的请求的事实。(此外,请求有时看起来像:
http://localhost:8081/myService?p1=A,p2=B,p3=C,?p1=A,p2=B,p3=C,p4=D,p5=E
!!!)
我跟踪了 javascript:生成函数只被调用一次(无论是什么浏览器),所以这听起来确实像一个 ie 问题。
有没有人有想法防止这种行为发生?