通过HTTP请求追踪客户端:服务器获取信息及Bot识别问询
HTTP请求中服务器可获取的客户端信息及相关问题解答
一、除IP和User-Agent外,可用于识别/定义客户端的参数
- 请求头字段
Accept:客户端能接受的内容类型,普通浏览器通常会列出多种类型(比如text/html,application/xhtml+xml),而脚本或简单工具可能只指定单一类型,甚至留空Accept-Language:客户端偏好的语言,真实用户的请求一般会携带符合所在地区的语言标识,很多Bot要么用默认值,要么干脆不带这个字段Accept-Encoding:支持的内容编码方式,浏览器通常会包含gzip, deflate, br这类主流编码,部分脚本可能不设置该字段Referer:请求的来源页面,真实用户从网页跳转发起请求时会携带,直接发起的请求或Bot大多为空
- TCP层辅助信息:比如请求的源端口,但端口是动态分配的,只能作为辅助判断,没法唯一识别客户端
- 请求行为特征:比如请求的频率、间隔时间、参数格式,Bot的请求往往节奏规律,真实用户的请求间隔更随机,参数也更符合正常操作逻辑
二、服务器能获取客户端MAC地址吗?
不能。MAC地址属于链路层标识,HTTP基于TCP/IP协议传输,数据包经过路由器转发时,源MAC地址会被替换成当前路由器的MAC,服务器只能拿到最后一跳路由器的MAC,根本获取不到客户端的真实MAC地址。
三、无会话、无共享令牌的独立请求,能区分Bot和真实用户吗?
可以通过多维度特征组合判断,但没法做到100%准确:
- 请求头完整性:真实浏览器的请求头通常很完整,会包含
Accept、Accept-Language等多个字段;多数脚本或Bot的请求头非常简略,可能只带Host和User-Agent这两个必要字段 - User-Agent细节:虽然这个字段可以伪造,但真实浏览器的User-Agent格式规范,会包含浏览器版本、操作系统等完整信息;很多Bot的User-Agent要么是直白的脚本标识(比如
Python-urllib/3.8),要么伪造得漏洞百出 - 请求行为模式:真实用户的请求一般是单次或间隔随机的,Bot则可能短时间内发起大量重复请求;另外,真实用户的请求参数更贴合正常操作场景,Bot的参数可能更机械、重复
- TLS握手特征:浏览器和脚本在TLS握手时的流程、加密套件选择有差异,服务器可以通过这些细节辅助识别
内容的提问来源于stack exchange,提问作者vish4071
相关产品推荐
相关产品推荐

