昨天做Goahead Web服務(wù)器的Digest Access Authentication認(rèn)證的時(shí)候,發(fā)現(xiàn)Web頁(yè)面沒(méi)有請(qǐng)求參數(shù)的時(shí)候,IE 6.0 和FireFox都可以正常的獲得頁(yè)面,但一旦有請(qǐng)求參數(shù)的時(shí)候,FireFox就不能連接了,返回401錯(cuò)誤。無(wú)奈之下查看Goahead的認(rèn)證代碼,然后就讓我大吃一驚。
在Goahead的websda.c 中的char_t *websCalcDigest(webs_t wp)函數(shù),里面有這么一句:
fmtAlloc(&a2, 255, T("%s:%s"), method, wp->uri);
當(dāng)我把wp->uri 換成wp->url時(shí),IE 6.0 不能工作,但FireFox 和IE 7.0可以正常的使用。差別就相當(dāng)于把計(jì)算Calculate second portion of digest H(A2)得參數(shù)改變了。比如從/cgi-bin/gecac.cgi 換成了/cgi-bin/gecac.cgi?req=get_net_config。從很多方面來(lái)說(shuō)FireFox都比IE的實(shí)現(xiàn)標(biāo)準(zhǔn),所以這里是IE 6.0的一個(gè)BUG, 而Goahead為了迎合IE 6.0作出了妥協(xié),最終導(dǎo)致這種情況的發(fā)生,還好MS 在IE 7.0中修復(fù)了這個(gè)BUG。
最終我不得不修改goahead的代碼來(lái)適應(yīng)IE 6.0。
a_assert(wp->userAgent);
/*
*如果是IE6.0 需要使用 uri計(jì)算,否則使用url計(jì)算
*/
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的時(shí)候內(nèi)存不能及時(shí)回收的問(wèn)題,也是很嚴(yán)重,反正問(wèn)題多多,我也經(jīng)不再使用IE 6.0了,可是做開(kāi)發(fā)也要考慮很多人還在使用它,真是歷史負(fù)擔(dān)嚴(yán)重。
posted on 2007-09-04 15:59
天下無(wú)雙 閱讀(1176)
評(píng)論(3) 編輯 收藏 引用 所屬分類:
嵌入式技術(shù)