昨天做Goahead Web服务器的Digest Access Authentication认证的时候,发现Web页面没有请求参数的时候,IE 6.0 和FireFox都可以正常的获得页面,但一旦有请求参数的时候,FireFox就不能连接了,返回401错误。无奈之下查看Goahead的认证代码,然后就让我大吃一惊。
在Goahead的websda.c 中的char_t *websCalcDigest(webs_t wp)函数,里面有这么一句:
fmtAlloc(&a2, 255, T("%s:%s"), method, wp->uri);
当我把wp->uri 换成wp->url时,IE 6.0 不能工作,但FireFox 和IE 7.0可以正常的使用。差别就相当于把计算Calculate second portion of digest H(A2)得参数改变了。比如从/cgi-bin/gecac.cgi 换成了/cgi-bin/gecac.cgi?req=get_net_config。从很多方面来说FireFox都比IE的实现标准,所以这里是IE 6.0的一个BUG, 而Goahead为了迎合IE 6.0作出了妥协,最终导致这种情况的发生,还好MS 在IE 7.0中修复了这个BUG。
最终我不得不修改goahead的代码来适应IE 6.0。
a_assert(wp->userAgent);
/*
*如果是IE6.0 需要使用 uri计算,否则使用url计算
*/
if( strstr(wp->userAgent,"MSIE 6.0") != NULL)
fmtAlloc(&a2, 255, T("%s:%s"), method, wp->uri);
else
fmtAlloc(&a2, 255, T("%s:%s"), method, wp->url);
还有就是IE 6.0 中使用AJAX的时候内存不能及时回收的问题,也是很严重,反正问题多多,我也经不再使用IE 6.0了,可是做开发也要考虑很多人还在使用它,真是历史负担严重。
posted on 2007-09-04 15:59
天下无双 阅读(1153)
评论(3) 编辑 收藏 引用 所属分类:
嵌入式技术