昨天做Goahead Web服務器的Digest Access Authentication認證的時候,發(fā)現(xiàn)Web頁面沒有請求參數(shù)的時候,IE 6.0 和FireFox都可以正常的獲得頁面,但一旦有請求參數(shù)的時候,FireFox就不能連接了,返回401錯誤。無奈之下查看Goahead的認證代碼,然后就讓我大吃一驚。
在Goahead的websda.c 中的char_t *websCalcDigest(webs_t wp)函數(shù),里面有這么一句:
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)得參數(shù)改變了。比如從/cgi-bin/gecac.cgi 換成了/cgi-bin/gecac.cgi?req=get_net_config。從很多方面來說FireFox都比IE的實現(xiàn)標準,所以這里是IE 6.0的一個BUG, 而Goahead為了迎合IE 6.0作出了妥協(xié),最終導致這種情況的發(fā)生,還好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了,可是做開發(fā)也要考慮很多人還在使用它,真是歷史負擔嚴重。
posted on 2007-09-04 15:59
天下無雙 閱讀(1168)
評論(3) 編輯 收藏 引用 所屬分類:
嵌入式技術