幾天前發現safari 4.0.2 在 upload file 的時候會有問題,CGI 沒有動作。但safari 5.0 是正常的。但為了客戶使用方便,還是針對safari 4.0.2 修正。

原先都是先從javascript和html下手,想說先問google大大有沒有答案,但都沒有得救,所以後來就冷靜下來,一步一步釐清。 當我發現同樣的html的內容在網路上測試的範例中 (http://www.cs.tut.fi/~jkorpela/forms/file.html) ,使用safari 4.0.2都可以觸發他的CGI,因此我將方向轉移到httpd server 的問題。

我先擷取了從IE執行這個CGI request的封包,再擷取Safari 4.0.2執行這個CGI request的封包,並比對內容,發現了header檔有些微的差異。

下圖為Safari 4.0.2 送出這個CGI request的封包內容:

以下為IE執行這個CGI request時所發出的封包,header的部份有滿多不一樣的地方,但是直覺我先懷疑為什麼Safari 4.0.2沒有帶上Authorization這個屬性的內容。

因此,接下來,我到httpd判斷Authorization的這個部份,印出Debug message,隨後確認是在進行認證的時候,被return了。

為了避免這個問題,我從User-Agent取得瀏覽器的種類和版本,如果是Safari 4.0.2則將old_safari這個變數設成1,用來避開這個問題。

並且修改成若為safari4.0.2且執行CGI的request則略過此auth_check,其他瀏覽器及所有html依然保持原本的運作方式。

補充一點資料:

在Apple的官網討論區,也有提到在windows版的safari 4.0.2 中,若沒有選擇"記住我的帳號密碼"這個選項,他們不會帶Ahtorization這個屬性,

經過測試之後,發現,若勾選之後,即可正常的看到authorization這個選項出現在封包內容裡。

討論網址如: https://discussions.apple.com/thread/2136821?start=0&tstart=0

arrow
arrow

    Yisin 發表在 痞客邦 留言(0) 人氣()