IE 6.0中Digest Access Authentication的BUG

IE 6.0中Digest Access Authentication的BUG

 昨天做Goahead Web服务器的Digest Access Authentication认证的时候,发现Web页面没有请求参数的时候,IE 6.0 FireFox都可以正常的获得页面,但一旦有请求参数的时候,FireFox就不能连接了,返回401错误。无奈之下查看Goahead的认证代码,然后就让我大吃一惊。

       Goaheadwebsda.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了,可是做开发也要考虑很多人还在使用它,真是历史负担严重。

你可能感兴趣的:(IE 6.0中Digest Access Authentication的BUG)