http-rs / http-types

Common types for HTTP operations
https://docs.rs/http-types
Apache License 2.0
200 stars 83 forks source link

`Accept::negotiate` does not handle wildcards correctly #402

Open jbearer opened 2 years ago

jbearer commented 2 years ago

It correctly handles * but not */* and basetype/*. For example, the spec indicates that */* should accept any media type, but the following snippet fails with No suitable Content-Type found

let mut req = Request::new(Method::Get, "http://localhost");
req.append_header("Accept", "*/*");
let mut accept = Accept::from_headers(&req).unwrap().unwrap();
accept.negotiate(&[mime::JSON]).unwrap();

Likewise, this also fails:

let mut req = Request::new(Method::Get, "http://localhost");
req.append_header("Accept", "application/*");
let mut accept = Accept::from_headers(&req).unwrap().unwrap();
accept.negotiate(&[mime::JSON]).unwrap();