Eli*_*lio 1 browser user-agent header http
我的应用程序有一个奇怪的行为。某些内容在 Internet Explorer 上可以正确显示,但在 Chrome 上根本不会显示。在另一个客户端上重现错误是不可能的(它适用于两个客户端),而且我也无法在有问题的客户端上测试它,因为它正在生产中并且我无权访问。唯一的方法是首先检查日志并查看发生了什么。计划是使用 IE 和 Chrome 查看从服务器加载内容的两个请求,并尝试找出任何差异。
在日志中我看到类似这样的内容:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36
我不明白 HTTP 请求的标头中如何可能User-Agent
包含三个不同的浏览器?!我如何知道请求是从哪个浏览器发出的?
这是浏览器世界中的“冒充别人”行为。出于实际原因,许多浏览器(如果不是全部)都采用了这种策略。有很多文章描述了这个问题,例如user-agent-string-history
对于所讨论的示例:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36
,它是 Windows 上的 Chrome 73。
对于OP在评论中提出的问题:
为什么浏览器会有这样的行为?
-- 因为许多网站/网页会嗅探哪个浏览器正在访问该页面,并且仅在浏览器是 IE/Mozilla/... 时才提供某些功能(糟糕的编程实践,但是...无论如何,这种情况发生了,尤其是在旧版本中)互联网的日子)。在这种情况下,如果发布了新浏览器并希望向用户展示该页面的相同功能,则必须假装为 IE/Mozilla/...
这是否意味着我无法从该日志中找到我需要的信息?
你可以。但是您需要User-Agent
与 User-Agent 数据库精确匹配,有超过 2,100,000 个 User-Agent 字符串...请检查https://developers.whatismybrowser.com/useragents/explore/software_type_specific/web-browser/2
为什么有时我在 User-Agent 标头属性中只看到一项?
因为某些用户代理决定不假装是其他人。一个典型的例子是命令行 HTTP 客户端,例如curl,它不需要处理浏览器嗅探。
归档时间: |
|
查看次数: |
914 次 |
最近记录: |