#header #http-header #http #内容协商

接受头

一个用于解析 HTTP 接受头的简单库,用于内容协商

4 个版本

0.2.3 2023年2月14日
0.2.2 2023年1月11日
0.2.1 2022年11月27日
0.1.2 2022年11月14日

#2287 in 网页编程

Download history 49/week @ 2024-03-13 65/week @ 2024-03-20 46/week @ 2024-03-27 39/week @ 2024-04-03 47/week @ 2024-04-10 71/week @ 2024-04-17 58/week @ 2024-04-24 38/week @ 2024-05-01 19/week @ 2024-05-08 28/week @ 2024-05-15 38/week @ 2024-05-22 60/week @ 2024-05-29 44/week @ 2024-06-05 58/week @ 2024-06-12 48/week @ 2024-06-19 24/week @ 2024-06-26

187 每月下载量
2 crates 中使用

MIT 许可证

14KB
309 代码行

HTTP 接受头

HTTP 接受头的一个非常基础且简单的实现。它使用 http crate 和 mime crate 来解析接受头。基本数据结构

#[derive(Debug, Clone, PartialEq)]
pub struct Accept {
    pub wildcard: Option<MediaType>,
    pub types: Vec<MediaType>,
}

#[derive(Debug, Clone, PartialEq)]
pub struct MediaType {
    pub mime: Mime,
    pub weight: Option<f32>,
}

使用方法

// parse accept header
let accept: Accept = "application/json, text/html;q=0.9, text/plain;q=0.8, */*;q=0.7"
    .parse()
    .unwrap();

// prepare a list of supported media types
let available = vec![
    Mime::from_str("text/html").unwrap(),
    Mime::from_str("application/json").unwrap(),
];

// content negotiation
let negotiated = accept.negotiate(&available).unwrap();

// "application/json" shall be chosen since it is available and has the highest weight
assert_eq!(negotiated, Mime::from_str("application/json").unwrap());

依赖关系

~2.5MB
~55K SLoC