0

最近我正在开发一个使用 .net Web 服务的 iOS 应用程序。在对 Web 服务方法调用的发布请求中,我不小心将 http 标头中的用户代理指定为

Mozilla/4.0(兼容;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 完成的。我还可以通过成功调用该 Web 服务方法在 iOS 设备上运行该应用程序。我的问题是 iOS 会忽略 HTTP 标头中的任何指定用户代理吗?为什么代码可以与这种不兼容的用户代理一起工作[至少在理论上]?

4

1 回答 1

0

服务器至少以两种方式使用 User-Agent 字符串:

  1. 收集有关使用哪些 Web 客户端访问服务器的统计信息。这可以帮助运行网站的人做得更好。

  2. 通过根据客户端的功能定制输出来提供更好的用户体验。例如,许多网站在检测到(通过 User-Agent 值)客户端是手机或小型平板电脑时,会提供为小屏幕定制的页面。

但是,当您调用 Web 服务时,您通常期望 XML 或 JSON 输出实际上不需要为给定的浏览器定制,因为:a) 请求可能不是来自浏览器首先,并且 b) 内容不太可能呈现在显示器上(至少不是直接呈现)。因此,用户代理字符串可能不会对服务器响应您的 Web 服务请求的方式产生任何影响。或者无论如何,当您从 iOS 设备发出 Web 服务请求时,提供一个显示“MSIE”的 User-Agent 字符串可能不会对您返回的内容产生影响。

现在,这并不是说 User-Agent 字符串永远不会产生影响。我不知道这是否是常见的做法,但在您同时控制客户端和服务器的情况下,让客户端提供一个明智的用户代理是很有意义的。让客户端包含其版本将使服务器根据客户端版本提供不同的输出,因此您可以在不破坏现有客户端的情况下更改 API。

于 2012-07-06T15:42:22.387 回答