感谢kangaroo_egg(袋鼠蛋)能如此认真地对Apusic 4.0有这样深入的测试,虽然有点鸡蛋里面挑骨头,但仍表示感谢,毕竟这样可以使Apusic更加完善。下面我对你所提出的问题做一些解答:1. 关于HTTP头部多余空行的问题 我再次仔细查阅了RFC 2068,第5.1节The Request-Line begins with a method token, followed by the Request-URI and the protocol version, and ending with CRLF. The elements are separated by SP characters. No CR or LF are allowed except in the final CRLF sequence. Request-Line = Method SP Request-URI SP HTTP-Version CRLF因此Apusic这样做并没有错,而且没有任何浏览器会发送这样的请求。Apusic是支持持久连接的,当你在发送第一个请求并要求keep-alive之后,后续请求之间可以包含任意多的空行,这点可以很容易写程序验证。Apusic在接收到CRLF之后立即关闭请求还有另外一个原因。Apusic是支持多路复用的,即在同一个端口下允许使用多种协议,并不仅限于HTTP。例如目前Apusic在缺省的6888端口下就支持HTTP, IIOP, JMS等多种协议,而且是可扩充的。实现多路复用的基本原理就是检测输入流的头几个字节,进而判断出协议类型。由于没有任何协议是以CRLF打头的,因此Apusic抛弃了这一连接请求。2. 断点续传(分范围请求)的问题。由于Apusic首先是一个J2EE应用服务器,其Web Server更多地是一个Servlet和JSP容器,文件传输并不是它的强项,但这并不表示Apusic不支持断点续传,这点用falshget就可以很容易验证,而不需要写什么程序。3. 对于JSP语法错误IE只会显示自己的500错误信息的问题,我们是按照标准HTTP协议来实现的,所以并没有针对IE做任何处理。如果你想在IE中看到错误信息其实也很简单,只需在IE中打开 工具->Internet选项->高级->浏览->显示友好HTTP错误信息 将上面的勾去掉就行了。IE只认为它的错误信息是"友好"的,别人的都是"不友好"的,它这么霸道,我们也没办法。4. 对于以下的JSP代码 <%int i = 0;%> <%在我这里是会报错的,烦请你再确认一下。5. 关于JSP文件错误行定位的问题,我们是尽可能地将Java编译出错位置与JSP源文件对应起来,在大多数情况下这种对应关系都很准确,甚至在运行过程中抛出的异常都能将出错位置指向JSP源文件,这在其他应用服务器中是见不到的。但有时这种对应关系并不能100%准确,针对你提出的特例我们将尽快予以改进。6. 中文文件名的和文件名中包含空格的问题,我们正在处理。7. 服务器是否支持可以防止过量http头信息的问题,非常感谢你为我们发现了一个较为严重的bug,我们会尽快发布安全补丁。 世界上没有任何一个软件是十全十美的,发现并解决问题不仅不会对软件造成伤害,反而会使软件向更好的方向发展。我相信国外同行们看到我们这些问题肯定不会耻笑我们,相反会善意地指出我们的问题,帮助我们改进。一个心态良好的程序员绝不会回避程序中存在的错误和缺陷,相反,每发现一个程序中的错误都会感到很兴奋,因为这个程序的稳定性又将要提高了。
我用java构造了一个请求,内容如下
Socket s = new Socket();
s.connect(new InetSocketAddress("127.0.0.1",6888), 80000);
PrintStream out = new PrintStream(s.getOutputStream());
out.print("\r\n"); //问题出在这里呢
out.print("GET / HTTP/1.1\r\n");
out.print("Accept-Language: zh-cn\r\n");
out.print("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)\r\n");
out.print("Host: www.apusic.com\r\n");
out.print("\r\n");
out.flush();BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = in.readLine();
while (line != null) {
System.out.println(line);
line = in.readLine();
}服务器端直接关闭了此次连接。问题出在哪里呢,看看程序里的注释,就知道了,因为请求部分第一行是一个空行,第二行才是请求命令,于是我们的Apusic V4.0就报错了,呵呵,你可以去试试看其他web服务器(IIS, Tomcat, Apache等等)你会发现这些服务器没有报错,为什么,因为http 1.1规范中必须支持此情况,因为持久连接的需要,然而我们的Apusic V4.0不支持。
断点续传(分范围请求)怎么样呢?
我用java构造了一个请求,内容如下
Socket s = new Socket();
s.connect(new InetSocketAddress("127.0.0.1",6888), 80000);
PrintStream out = new PrintStream(s.getOutputStream());
out.print("GET / HTTP/1.1\r\n");
out.print("Accept-Language: zh-cn\r\n");
out.print("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)\r\n");
out.print("Range: bytes=-2;2-10\r\n"); //或者out.print("Range: bytes=-2,2-10\r\n"); 都不支持
out.print("Host: www.apusic.com\r\n");
out.print("\r\n");
out.flush();BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = in.readLine();
while (line != null) {
System.out.println(line);
line = in.readLine();
}
让我很吃惊Apusic V4.0 web服务器竟然不支持多部分范围请求。http 1.1的协议都支持不好,很难想象他的其他规范支持的如何。好让我来新建一个jsp来测试
jsp就一行,而且结尾少了一个分号
<%int i = 0%>此jsp运行应该报错,可是如果你用IE 6.0去访问这个jsp文件,你会发现IE只会显示自己的500错误信息,而Apusic V4.0返回的错误信息却看不到。但出错信息在控制台会打出。问题出在哪里呢?呵呵其实问题是在IE不兼容,但是我想你也应该照顾一下IE吧,毕竟用IE的人多,如果你的出错信息比较多则IE可以显示Apusic V4.0返回的错误信息。
先在把jsp改成下面的内容
<%int i = 0;%>
<%
呵呵编译顺利通过,你甚至还可以写这样的一句<% <% %>,编译照样通过,我不太确定这是否符合jsp规范吗?
Apusic V4.0似乎对于jsp文件的出错行处理的很好,那么我们看以下这个jsptest begin
<%=get()%><%!private int i = 0;
private int get() {
return i++;
%> <--出错行在这里
};%>
test endApusic V4.0会告诉你jsp文件的出错行在第一行,事实是出错行在(见上面的标识)
Apusic V4.0用了个很愚蠢的办法去寻找jsp文件的出错行导致像这样的错误无法正确显示jsp出错行,你可以看jsp编译后的java文件。中国人的软件,对中文支持如何呢?对中文目录和文件名都不支持。Tomcat不支持人家是外国的,可你Apusic V4.0是国产的。
搞笑的安装
如果你Apusic V4.0的安装目录中含有空格或中文,那么对不起,你的jsp就无法顺利编译了,最简单在windows下你可以把Apusic V4.0装到系统盘Program Files目录下去,因为此目录名中含有空格,在看看你的jsp还能不能编译通过。
最后我看了看Apusic V4.0 web服务器是否支持可以防止过量http头信息,很遗憾不支持,看看下面这个用java写的请求
Socket s = new Socket();
s.connect(new InetSocketAddress("127.0.0.1",6888), 80000);
PrintStream out = new PrintStream(s.getOutputStream());
out.print("GET / HTTP/1.1\r\n");
while(true) {
out.print("crack you !!")
}此程序将不断的向Apusic V4.0 web服务器发送"crack you !!",而Apusic V4.0 web服务器却不会单方面中断这个非法请求,于是这些发过去的"crack you !!"将会存在Apusic V4.0 web服务器的内存中(并且大量消耗cpu),你可以自己试一下,服务器的内存不断在增加,只要你耐性或有够多的机器,不用多久就可以叫Apusic V4.0 web服务器宕掉。
你可以去测以下其他知名web服务器,都没有这个问题。
好了,我只是简单看了一下,其他还有很多问题我都不想写了,我不知道为什么这麽简单的一些功能都会有错,国外免费的都比你做得好,这种问题拿出去被国外同行看倒不是被人家笑死。
我用java构造了一个请求,内容如下
Socket s = new Socket();
s.connect(new InetSocketAddress("127.0.0.1",6888), 80000);
PrintStream out = new PrintStream(s.getOutputStream());
out.print("\r\n"); //问题出在这里呢
out.print("GET / HTTP/1.1\r\n");
out.print("Accept-Language: zh-cn\r\n");
out.print("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)\r\n");
out.print("Host: www.apusic.com\r\n");
out.print("\r\n");
out.flush();BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = in.readLine();
while (line != null) {
System.out.println(line);
line = in.readLine();
}服务器端直接关闭了此次连接。问题出在哪里呢,看看程序里的注释,就知道了,因为请求部分第一行是一个空行,第二行才是请求命令,于是我们的Apusic V4.0就报错了,呵呵,你可以去试试看其他web服务器(IIS, Tomcat, Apache等等)你会发现这些服务器没有报错,为什么,因为http 1.1规范中必须支持此情况,因为持久连接的需要,然而我们的Apusic V4.0不支持。
断点续传(分范围请求)怎么样呢?
我用java构造了一个请求,内容如下
Socket s = new Socket();
s.connect(new InetSocketAddress("127.0.0.1",6888), 80000);
PrintStream out = new PrintStream(s.getOutputStream());
out.print("GET / HTTP/1.1\r\n");
out.print("Accept-Language: zh-cn\r\n");
out.print("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)\r\n");
out.print("Range: bytes=-2;2-10\r\n"); //或者out.print("Range: bytes=-2,2-10\r\n"); 都不支持
out.print("Host: www.apusic.com\r\n");
out.print("\r\n");
out.flush();BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = in.readLine();
while (line != null) {
System.out.println(line);
line = in.readLine();
}
让我很吃惊Apusic V4.0 web服务器竟然不支持多部分范围请求。http 1.1的协议都支持不好,很难想象他的其他规范支持的如何。好让我来新建一个jsp来测试
jsp就一行,而且结尾少了一个分号
<%int i = 0%>此jsp运行应该报错,可是如果你用IE 6.0去访问这个jsp文件,你会发现IE只会显示自己的500错误信息,而Apusic V4.0返回的错误信息却看不到。但出错信息在控制台会打出。问题出在哪里呢?呵呵其实问题是在IE不兼容,但是我想你也应该照顾一下IE吧,毕竟用IE的人多,如果你的出错信息比较多则IE可以显示Apusic V4.0返回的错误信息。
先在把jsp改成下面的内容
<%int i = 0;%>
<%
呵呵编译顺利通过,你甚至还可以写这样的一句<% <% %>,编译照样通过,我不太确定这是否符合jsp规范吗?
Apusic V4.0似乎对于jsp文件的出错行处理的很好,那么我们看以下这个jsptest begin
<%=get()%><%!private int i = 0;
private int get() {
return i++;
%> <--出错行在这里
};%>
test endApusic V4.0会告诉你jsp文件的出错行在第一行,事实是出错行在(见上面的标识)
Apusic V4.0用了个很愚蠢的办法去寻找jsp文件的出错行导致像这样的错误无法正确显示jsp出错行,你可以看jsp编译后的java文件。中国人的软件,对中文支持如何呢?对中文目录和文件名都不支持。Tomcat不支持人家是外国的,可你Apusic V4.0是国产的。
搞笑的安装
如果你Apusic V4.0的安装目录中含有空格或中文,那么对不起,你的jsp就无法顺利编译了,最简单在windows下你可以把Apusic V4.0装到系统盘Program Files目录下去,因为此目录名中含有空格,在看看你的jsp还能不能编译通过。
最后我看了看Apusic V4.0 web服务器是否支持可以防止过量http头信息,很遗憾不支持,看看下面这个用java写的请求
Socket s = new Socket();
s.connect(new InetSocketAddress("127.0.0.1",6888), 80000);
PrintStream out = new PrintStream(s.getOutputStream());
out.print("GET / HTTP/1.1\r\n");
while(true) {
out.print("crack you !!")
}此程序将不断的向Apusic V4.0 web服务器发送"crack you !!",而Apusic V4.0 web服务器却不会单方面中断这个非法请求,于是这些发过去的"crack you !!"将会存在Apusic V4.0 web服务器的内存中(并且大量消耗cpu),你可以自己试一下,服务器的内存不断在增加,只要你耐性或有够多的机器,不用多久就可以叫Apusic V4.0 web服务器宕掉。
你可以去测以下其他知名web服务器,都没有这个问题。
好了,我只是简单看了一下,其他还有很多问题我都不想写了,我不知道为什么这麽简单的一些功能都会有错,国外免费的都比你做得好,这种问题拿出去被国外同行看倒不是被人家笑死。
楼上2楼的多看看http rfc
我再次仔细查阅了RFC 2068,第5.1节The Request-Line begins with a method token, followed by the
Request-URI and the protocol version, and ending with CRLF. The
elements are separated by SP characters. No CR or LF are allowed
except in the final CRLF sequence. Request-Line = Method SP Request-URI SP HTTP-Version CRLF因此Apusic这样做并没有错,而且没有任何浏览器会发送这样的请求。Apusic是支持持久连接的,当你在发送第一个请求并要求keep-alive之后,后续请求之间可以包含任意多的空行,这点可以很容易写程序验证。Apusic在接收到CRLF之后立即关闭请求还有另外一个原因。Apusic是支持多路复用的,即在同一个端口下允许使用多种协议,并不仅限于HTTP。例如目前Apusic在缺省的6888端口下就支持HTTP, IIOP, JMS等多种协议,而且是可扩充的。实现多路复用的基本原理就是检测输入流的头几个字节,进而判断出协议类型。由于没有任何协议是以CRLF打头的,因此Apusic抛弃了这一连接请求。2. 断点续传(分范围请求)的问题。由于Apusic首先是一个J2EE应用服务器,其Web Server更多地是一个Servlet和JSP容器,文件传输并不是它的强项,但这并不表示Apusic不支持断点续传,这点用falshget就可以很容易验证,而不需要写什么程序。3. 对于JSP语法错误IE只会显示自己的500错误信息的问题,我们是按照标准HTTP协议来实现的,所以并没有针对IE做任何处理。如果你想在IE中看到错误信息其实也很简单,只需在IE中打开
工具->Internet选项->高级->浏览->显示友好HTTP错误信息
将上面的勾去掉就行了。IE只认为它的错误信息是"友好"的,别人的都是"不友好"的,它这么霸道,我们也没办法。4. 对于以下的JSP代码
<%int i = 0;%>
<%在我这里是会报错的,烦请你再确认一下。5. 关于JSP文件错误行定位的问题,我们是尽可能地将Java编译出错位置与JSP源文件对应起来,在大多数情况下这种对应关系都很准确,甚至在运行过程中抛出的异常都能将出错位置指向JSP源文件,这在其他应用服务器中是见不到的。但有时这种对应关系并不能100%准确,针对你提出的特例我们将尽快予以改进。6. 中文文件名的和文件名中包含空格的问题,我们正在处理。7. 服务器是否支持可以防止过量http头信息的问题,非常感谢你为我们发现了一个较为严重的bug,我们会尽快发布安全补丁。
世界上没有任何一个软件是十全十美的,发现并解决问题不仅不会对软件造成伤害,反而会使软件向更好的方向发展。我相信国外同行们看到我们这些问题肯定不会耻笑我们,相反会善意地指出我们的问题,帮助我们改进。一个心态良好的程序员绝不会回避程序中存在的错误和缺陷,相反,每发现一个程序中的错误都会感到很兴奋,因为这个程序的稳定性又将要提高了。
金蝶Apusic应用服务器意味着什么?Microsoft至今还没有一个像样的应用服务器。事实上,它至今还没有真正进入企业级开发领域。
至于那个事是不是BUG,不是问题。被许多人奉为神明的Windows,还一天到晚打补丁呢。
中国人,别浮燥,也别迷信,一步一步地做,才有可能赶超先进水平。
我相信这只是一个过程,也是一个必须经历的过程,没有任何一个软件是十全十美的,当我们经历的多了,结果自然会好的。要相信自己。呵呵。
学习ing!!!
虽然我不是搞web的,
但看到 回复人: kangaroo_egg(袋鼠蛋) ( ) 信誉:100 2005-05-19 17:39:00 得分: 0 这个牛人的测试,表示非常的佩服像这样的bug中国人的软件,对中文支持如何呢?对中文目录和文件名都不支持。
空格,等我觉得太不应该了e,因为这样de小bug十分容易测试出来.,真的怀疑是否经过严密的测试
我不敢恭维!
话说的也未免太偏激了,事实是这样的。怎么说也是我国自产的!
感觉做事总不能吃里爬外吧!
应该以一种理解的角度去看问题,说句不太好听的,你这样讲,也就是你可以做的比Apusic更好的了,那你就自己做自己用好了!这样并不是说这就是国人我也一样的爱面子,讲话前应三思客观的看待!
金碟能推出Apusic的确让人振奋。国外这样级别的软件也是要过多个版本才能稳定下来的。
而且怎么发音?
真希望有一个中国名字!