You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Headless Chrome不发送Accept-Language请求头的原因及强制配置方法

Headless Chrome不发送Accept-Language请求头的原因及解决办法

这是Headless Chrome里一个挺典型的行为差异,我来给你理清楚:

为什么会出现这个现象?

Headless模式下的Chrome,默认不会加载系统层面的语言配置,也不会自动生成Accept-Language请求头。原因在于Headless的设计定位是无界面自动化场景,它默认省略了很多和用户交互、系统环境绑定的配置项——比如有界面的Chrome会读取你的系统语言或浏览器内设置的语言偏好,自动组装Accept-Language头;但Headless模式为了保持环境的“干净”和可预测性,默认不做这些自动读取的操作,所以就不会发送这个请求头。

如何强制发送Accept-Language请求头?

有两种简单直接的方式:

1. 使用--lang启动参数

这是最便捷的命令行解决方案,直接指定Chrome使用的语言区域,它会自动生成对应的Accept-Language请求头。比如把你的启动命令修改为:

chrome --headless --incognito --window-size=1920,1080 --disable-gpu --no-sandbox --lang=en-US http://www.daringfireball.net/

这里的en-US可以替换成你需要的语言码(比如zh-CN对应简体中文),启动后再用Fiddler检查,就能看到Accept-Language: en-US,en;q=0.9这类符合规范的请求头了。

2. 通过Chrome DevTools Protocol(CDP)配置(适合自动化脚本场景)

如果是在代码里用Puppeteer、Playwright这类工具调用Headless Chrome,可以通过CDP或直接设置请求头的方式来配置,比如:

// 以Puppeteer为例,直接设置请求头
await page.setExtraHTTPHeaders({
  'Accept-Language': 'zh-CN,zh;q=0.9'
});

这种方式更灵活,适合需要动态调整语言的自动化场景。

内容的提问来源于stack exchange,提问作者Matt W

火山引擎 最新活动