“User-Agent”头字段包含组织请求的用户代理的信息,这经常被服务器用于帮助识别被报告的互通性问题的范围,以解决或定制响应来闭眼特殊的用户代理限制,并用于分析关于浏览器或操作系统的使用。用户代理应该在每个请求中发送User-Agent字段,除非特别配置为不这么做。
User-Agent = product *( RWS ( product / comment ) )
用User-Agent字段值由一个或多个产品标识符组成,每个标识符跟随领个或多个注解(RFC7230,3.2节),他们一起辨认用户代理软件和它的重要副产品。按惯例,产品标识符被按重要性降序被列出以识别用户代理软件。每个产品标识符由名称和可选的版本号组成。
product = token ["/" product-version] product-version = token
发送者应该限制产品标识符为识别产品的必要内容;发送者不得在产品标识符中生成广告或其他非本质的信息。发送者不应该在产品版本中生成不是版本标识符(即,相同产品名的连续版本号应该只由产品标识符的产品版本的一部分不同)的信息。
例如:
User-Agent: CERN-LineMode/2.15 libwww/2.17b3
用户代理不应该生成包含不必要的细节的User-Agent字段并且应该由第三方限制子产品的增加。过长和详细的User-Agent字段值增加了请求延时和用户被认定为违背其意愿的风险(“指纹”)。
同样,实现被鼓励必要使用其他实现的产品标记来宣称与他们兼容,因为这规避了该字段的目的。如果用户代理伪装为一个不同的用户代理,接收者可以假定用户故意去查看为其他用户代理定制的响应,即使他们可能不能向为真正的用户代理使用的那样正常工作。