Headlesschrome不发送Accept-Languageheader

Headless chrome does not send Accept-Language header

在测试 headless chrome 时,我注意到它不传输 Accept-Language header 条目。我已经确认当有可见浏览器时它确实会被发送 window。

这有什么原因吗?chrome 是否可以选择 require/force 发送这些正常值?

要查看此内容,您可以启动 Fiddler 并在命令行中键入:

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

在 Fiddler 检查器(原始视图)中,您会看到:

GET https://daringfireball.net/css/ie_sucks HTTP/1.1
Host: daringfireball.net
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/65.0.3325.181 Safari/537.36
Accept: text/css,*/*;q=0.1
Referer: https://daringfireball.net/
Accept-Encoding: gzip, deflate

而 运行 不带 --headless 的相同命令给您:

GET https://daringfireball.net/css/ie_sucks.php HTTP/1.1
Host: daringfireball.net
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Accept: text/css,*/*;q=0.1
Referer: https://daringfireball.net/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8

看起来 Accept-Language 是一个 user-profile header 仅当浏览器有一个确认的用户指定语言时发送,因为 headless 没有用户 can/does不发送 header。这是在这些帖子中提出的,在可预见的未来看起来是一个缺乏的功能:

https://github.com/SeleniumHQ/selenium/issues/4437 https://bugs.chromium.org/p/chromedriver/issues/detail?id=1925

当运行无头模式时,设置以下选项:

'--lang=en-GB'