最近我正在开发一个消耗.net网络服务的iOS应用程序。在那个对Web服务方法调用的post请求中,我意外地将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)
通过简单的NSURLConnection完成Web服务调用。 此外,我能够通过成功的呼叫在iOS设备上运行该应用程序 到那个Web服务方法。我的问题是iOS是否忽略了HTTP标头中的任何指定用户代理?为什么代码适用于这种不兼容的用户代理[至少在理论上]?
答案 0 :(得分:0)
服务器至少以两种方式使用User-Agent字符串:
收集有关用于访问服务器的Web客户端的统计信息。这可以帮助运行网站的人做得更好。
通过根据客户端的功能定制输出来提供更好的用户体验。例如,许多网站在检测到(通过User-Agent值)客户端是手机或小型平板电脑时,将提供为小屏幕定制的页面。
当您调用Web服务时,您通常期望XML或JSON输出真的不需要为给定的浏览器进行自定义,因为:a)请求可能不会到来首先从浏览器,和b)内容不太可能被渲染到显示器上(至少不是直接)。因此,User-Agent字符串可能不会对服务器响应Web服务请求的方式产生任何影响。或者无论如何,当您从iOS设备发出Web服务请求时,提供一个“MSIE”的用户代理字符串可能不会对您的回复产生影响。
现在,这并不是说User-Agent字符串永远不会有所作为。我不知道这是否是常见做法,但如果您控制客户端和服务器,客户端提供合理的用户代理将是非常有意义的。让客户端包含其版本会让服务器根据客户端版本提供不同的输出,因此您可以在不破坏现有客户端的情况下对API进行更改。