2010-07-22 35 views
3

我正在測試Android 2.0和2.2模擬器上的網頁,並且jQuery.ajax()請求應用程序使HTTP關於HTTP身份驗證標頭的行爲稍有不同。AJAX請求如何在Android 2.0與Android 2.2上工作

我要求的服務器需要基本身份驗證,並且2.2中的ajax請求發送正確的auth頭文件。在2.0中,我使用Fiddler進行調試,並且似乎請求中不包含auth頭,服務器拒絕401.2錯誤的請求。我不認爲它很重要,但服務器運行IIS 7.

我在調試Web請求時注意到的一件有趣事情是Android 2.2對每個資源發出兩個請求,不管它是否是XHR。一個不包含Auth頭,第二個包含。在2.0中,它似乎讓一切2個請求,但XHR的:

這裏是第一XHR 2.2標題:

GET http://192.168.1.111/sonar/mobileweb/sonar/views/week/init.ejs HTTP/1.1 
Host: 192.168.1.111 
Accept-Encoding: gzip 
Referer: http://192.168.1.111/sonar/mobileweb/sonar/sonar.html 
Accept-Language: en-US 
User-Agent: Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 
Accept: text/plain, */* 
X-Requested-With: XMLHttpRequest 
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7 

2.2頭第二XHR:

GET http://192.168.1.111/sonar/mobileweb/sonar/views/week/init.ejs HTTP/1.1 
Host: 192.168.1.111 
Accept-Encoding: gzip 
Referer: http://192.168.1.111/sonar/mobileweb/sonar/sonar.html 
Accept-Language: en-US 
User-Agent: Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 
Authorization: Basic cGFyaXZlZGFcZGF2aWQubW9ycmlzOjIzbkx2ZWxsbGw= 
Accept: text/plain, */* 
X-Requested-With: XMLHttpRequest 
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7 

和2.0頭:

GET http://192.168.1.111/app/views/week/init.ejs HTTP/1.1 
Host: 192.168.1.111 
Accept-Encoding: gzip 
Referer: http://192.168.1.111/app/app.html 
Accept-Language: en-US 
User-Agent: Mozilla/5.0 (Linux; U; Android 2.0; en-us; sdk Build/ECLAIR) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17 
Accept: text/plain, */* 
X-Requested-With: XMLHttpRequest 
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7 

有沒有人遇到過這種行爲?這基本上導致我的應用在2.0版本中根本不工作。版本2.1似乎與2.0相同。

讓我知道如果您有任何意見,感謝您的幫助,

戴夫

+0

我發現了一個機票項目似乎是相關的Android項目: http://code.google.com/p/android/issues/detail ?id = 3497 任何人都可以幫助我驗證此問題是否特定於2.1和更低版本,並可能幫助我從我的最終解決問題?謝謝, 戴夫 – 2010-07-27 14:34:40

回答

0

是的,我有相同的問題,並能夠通過寫AUTH數據到各種各樣的變通方法首先登錄cookie,然後將此添加到2.0中的每個登錄中的ajax請求,但在2.1中,出於某種原因,這在嘗試快速時不起作用,但如果您在ajax請求的步驟之間暫停,那麼它將起作用。另外一個瀏覽器刷新似乎然後攜帶的身份驗證數據...

+0

有趣。我可能會嘗試添加一個暫停。我懷疑它與使ajax請求同步與異步有關。在我的應用程序中有問題的請求是一個同步請求,所以我想知道這是否是問題的一部分。我嘗試手動注入auth頭文件,但仍無法使其正常工作。我會盡量延遲看看會發生什麼。感謝您的幫助, Dave – 2010-08-11 05:22:11