大多数请求头不是你写的,甚至不是你看见的——浏览器在你发出请求的那一刻,自动替你带上了十几行头。这些自动头是浏览器与网站之间的「标准寒暄」,代理IP链路里它们同样随行,只是多数时候不被注意。
理解哪些头是浏览器自动带的,有两个实际好处:一是排查问题时知道哪些头不该由自己负责,二是调试接口时知道哪些头其实不用手动补——浏览器已经做好了。
这篇把浏览器自动附带的头分成几类讲清楚:身份介绍类、能力声明类、连接管理类,以及哪些能由你接管。
自我介绍类:User-Agent 等
最典型的是 User-Agent:它声明「我是哪个浏览器、跑在什么系统上」,让网站能按客户端能力返回合适的页面。还有 Referer 之类的头,告诉对方这次访问是从哪里跳来的。这类头由浏览器自动生成,一般不需要你操心。
能力声明类:Accept 等
Accept 家族由浏览器按自身能力自动填充:能接受哪些图片格式、偏好的语言是什么、连接怎么管理。它们让服务器能「投其所好」地返回内容。你手动改这些头的情况很少,除非刻意模拟其他客户端的偏好。
连接管理类:Connection 等
浏览器还会自动管理连接相关的头:是否保持连接、请求的目标地址(Host)等。这些头跟着网络环境走,浏览器内部处理,不需要用户干预。代理IP链路中它们会经转发层原样或改写地继续传递,观察这些头的去向能帮助判断请求的走向。
自动头虽然多,但有一个共同点:它们描述的是「这个浏览器、这台设备、这次连接」的客观情况,不随用户意图变化。网站拿它们做统计与适配,但不该拿它们当身份凭证——这是自动头的性质边界。

需要自己写头的情况也存在:用程序走代理IP发请求时没有浏览器代劳,请求头要自己构造;需要带自定义信息或模拟特定场景时也要手动加。分清「浏览器替你做的」与「需要自己写的」,是接口调试的第一步。
浏览器自动替你带好三族头:自我介绍、能力声明、连接管理——多数请求头不用自己写,自己写的场景集中在程序请求与定制需求。
自动头里藏着浏览器对服务器的一份「愿望清单」:我想要这种格式、那种语言。这份清单的协商过程,就是内容协商——Accept 家族如何表达偏好、服务器如何回应偏好,值得单独一篇。
自动头也会随环境变化
自动头并非一成不变:换了浏览器、更新了系统、甚至切换了语言,自动头的内容都会跟着变。网站与统计系统观察到的「浏览器分布」「系统分布」,数据来源就是这些自动头。代理IP场景中出口地区变化时,部分自动头也可能带上新的地区特征。
想验证浏览器到底发了哪些自动头,开发者工具的网络面板里点开任意一个请求即可看到完整清单。看一次真实清单,比背十遍理论都管用——你会发现自动头远比你想象的多,也远比想象的有条理。
把自动头理解为浏览器的「出厂设置」最贴切,走代理IP时它们依然随行:它替你完成了大部分标准沟通,让你能专注于内容本身。代理IP场景里观察自动头还有一层价值——出口变化与自动头之间的配合关系,能帮你判断请求到底走了哪条路,排查时多一个参照。
