2012-07-04 35 views
0

最近我正在開發一個iOS應用程序,它使用.net Web服務。在一個Web服務方法調用的post請求中,我意外地指定了http標頭中的用戶代理是一個HTTP頭iOS5中的用戶代理

Mozilla/4.0(compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDS; .NET4.0C; .NET4.0E; InfoPath.2; MS-RTC LM 8; BRI/2)

Web服務調用僅通過NSURLConnection完成。 另外,我可以在iOS設備上運行該應用程序,併成功調用該Web服務方法的 。我的問題是,iOS是否忽略HTTP頭中的任何指定的用戶代理?爲什麼代碼與這種不兼容的用戶代理[至少在理論上]一起工作?

回答

0

服務器使用的用戶代理字符串中至少有兩種方法:有關被用來訪問服務器什麼是Web客戶端

  1. 收集統計信息。這可以幫助運行網站的人做得更好。

  2. 通過針對客戶端的功能定製輸出來提供更好的用戶體驗。例如,許多網站會在檢測到(通過User-Agent值)客戶端是手機或小型平板電腦時爲小屏幕提供自定義頁面。

當你撥打電話到Web服務,不過,你通常希望XML或JSON輸出真的不需要進行自定義一個給定的瀏覽器,因爲:1)可能請求不是首先來自瀏覽器,並且b)內容不太可能被呈現在顯示器上(至少不是直接)。因此,User-Agent字符串在服務器響應Web服務請求的方式上可能沒有任何區別。或者無論如何,當您從iOS設備發出網絡服務請求時,提供一個表示「MSIE」的用戶代理字符串可能不會影響您返回的內容。

現在,這並不是說用戶代理字符串永遠不會有所作爲。我不知道這是否是常見做法,但在客戶端和服務器都控制的情況下,讓客戶端提供一個合理的用戶代理會很有意義。讓客戶端包含其版本會讓服務器根據客戶端版本提供不同的輸出,因此您可以在不破壞現有客戶端的情況下對API進行更改。