Expand description
§Typed HTTP Headers
hyper has the opinion that headers should be strongly-typed, because that’s
why we’re using Rust in the first place. To set or get any header, an object
must implement the Header trait from this module. Several common headers
are already provided, such as Host, ContentType, UserAgent, and others.
§Why Typed?
Or, why not stringly-typed? Types give the following advantages:
- More difficult to typo, since typos in types should be caught by the compiler
- Parsing to a proper type by default
§Defining Custom Headers
§Implementing the Header trait
Consider a Do Not Track header. It can be true or false, but it represents
that via the numerals 1 and 0.
extern crate http;
extern crate headers;
use headers::{Header, HeaderName, HeaderValue};
struct Dnt(bool);
impl Header for Dnt {
fn name() -> &'static HeaderName {
&http::header::DNT
}
fn decode<'i, I>(values: &mut I) -> Result<Self, headers::Error>
where
I: Iterator<Item = &'i HeaderValue>,
{
let value = values
.next()
.ok_or_else(headers::Error::invalid)?;
if value == "0" {
Ok(Dnt(false))
} else if value == "1" {
Ok(Dnt(true))
} else {
Err(headers::Error::invalid())
}
}
fn encode<E>(&self, values: &mut E)
where
E: Extend<HeaderValue>,
{
let s = if self.0 {
"1"
} else {
"0"
};
let value = HeaderValue::from_static(s);
values.extend(std::iter::once(value));
}
}Modules§
- Authorization header and types.
Structs§
Accept-Rangesheader, defined in RFC7233Access-Control-Allow-Credentialsheader, part of CORSAccess-Control-Allow-Headersheader, part of CORSAccess-Control-Allow-Methodsheader, part of CORS- The
Access-Control-Allow-Originresponse header, part of CORS Access-Control-Expose-Headersheader, part of CORSAccess-Control-Max-Ageheader, part of CORSAccess-Control-Request-Headersheader, part of CORSAccess-Control-Request-Methodheader, part of CORSAgeheader, defined in RFC7234Allowheader, defined in RFC7231Authorizationheader, defined in RFC7235Connectionheader, defined in RFC7230- A
Content-Dispositionheader, (re)defined in RFC6266. Content-Encodingheader, defined in RFC7231Content-Lengthheader, defined in RFC7230Content-Locationheader, defined in RFC7231- Content-Range, described in RFC7233
Content-Typeheader, defined in RFC7231Cookieheader, defined in RFC6265Dateheader, defined in RFC7231ETagheader, defined in RFC7232- Errors trying to decode a header.
- The
Expectheader. Expiresheader, defined in RFC7234- The
Hostheader. If-Matchheader, defined in RFC7232If-Modified-Sinceheader, defined in RFC7232If-None-Matchheader, defined in RFC7232If-Rangeheader, defined in RFC7233If-Unmodified-Sinceheader, defined in RFC7232Last-Modifiedheader, defined in RFC7232Locationheader, defined in RFC7231- The
Originheader. - The
Pragmaheader defined by HTTP/1.0. Proxy-Authorizationheader, defined in RFC7235Rangeheader, defined in RFC7233Refererheader, defined in RFC7231Referrer-Policyheader, part of Referrer Policy- The
Retry-Afterheader. - The
Sec-Websocket-Acceptheader. - The
Sec-Websocket-Keyheader. - The
Sec-Websocket-Versionheader. Serverheader, defined in RFC7231Set-Cookieheader, defined RFC6265StrictTransportSecurityheader, defined in RFC6797TEheader, defined in RFC7230Transfer-Encodingheader, defined in RFC7230Upgradeheader, defined in RFC7230User-Agentheader, defined in RFC7231Varyheader, defined in RFC7231
Traits§
- A trait for any object that will represent a header field and value.
- An extension trait adding “typed” methods to
http::HeaderMap.