HTTP请求头 - Downlink
LI Rui

在翻MDN的时候看到了一个实验性的HTTP头Downlink,根据描述,这个头提供了客户端大致带宽,并且为了防止指纹追踪,浏览器会添加一定的噪声。这个功能可以用于让服务器决定返回给客户端什么质量的内容,如图片、视频是否压缩。

如果想获得这个头,服务器在第一次响应头中需要添加Accept-CH: Downlink来告知客户端,客户端之后的连接便会附上带宽。在Black Tea框架中,示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use blacktea::{Server, HttpResponse, Method, App, Context};

async fn speed(cxt: Context) -> HttpResponse {
let header = cxt.req.headers().get("Downlink");
if let Some(downlink) = header {
HttpResponse::Ok().text(&format!("{}Mbps", downlink.to_str().unwrap()))
} else {
HttpResponse::Ok().header("Accept-CH", "Downlink").text("Requsted Downlink Header")
}
}

#[tokio::main]
async fn main() {
pretty_env_logger::init();
let mut server = Server::new("127.0.0.1:8080");
let mut app = App::new();
app.add("/speed", Method::GET, Box::new(speed));
server.mount("/v1", app);
server.run().await
}

在Chromium 91的测试中,我们发现尽管Accept-CH在文档中被要求需要HTTPS链接,但是实际上HTTP也能被浏览器接受。第一次访问服务器要求客户端提供Downlink后,直到关闭浏览器,Chromium均会对当前域名下的全部URL返回下载带宽。并且这个带宽数值会根据浏览器浏览不同网页的速度动态变化,但下载文件的速度并未被统计进去。有趣的是,无论怎么变化,测试出来的Downlink最大值为10Mbps,不知道是内置了上限还是因为本机网络的原因。

  • 本文标题:HTTP请求头 - Downlink
  • 本文作者:LI Rui
  • 创建时间:2021-06-22 10:26:00
  • 本文链接:https://www.lirui.tech/post/2021/e4dbaa5f5804.html
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-SA 许可协议。转载请注明出处!