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-Ranges
header, defined in RFC7233Access-Control-Allow-Credentials
header, part of
CORSAccess-Control-Allow-Headers
header, part of
CORSAccess-Control-Allow-Methods
header, part of
CORSThe
Access-Control-Allow-Origin
response header,
part of CORSAccess-Control-Expose-Headers
header, part of
CORSAccess-Control-Max-Age
header, part of
CORSAccess-Control-Request-Headers
header, part of
CORSAccess-Control-Request-Method
header, part of
CORSAuthorization
header, defined in RFC7235Cache-Control
header, defined in RFC7234Connection
header, defined in
RFC7230A
Content-Disposition
header, (re)defined in RFC6266.Content-Encoding
header, defined in
RFC7231Content-Length
header, defined in
RFC7230Content-Location
header, defined in
RFC7231Content-Range, described in RFC7233
Content-Type
header, defined in
RFC7231Errors trying to decode a header.
The
Expect
header.A set of HTTP headers
Represents an HTTP header field name
Represents an HTTP header field value.
The
Host
header.If-Modified-Since
header, defined in
RFC7232If-None-Match
header, defined in
RFC7232If-Unmodified-Since
header, defined in
RFC7232Last-Modified
header, defined in
RFC7232The
Origin
header.The
Pragma
header defined by HTTP/1.0.Proxy-Authorization
header, defined in RFC7235Referrer-Policy
header, part of
Referrer PolicyThe
Retry-After
header.The
Sec-Websocket-Accept
header.The
Sec-Websocket-Key
header.The
Sec-Websocket-Version
header.StrictTransportSecurity
header, defined in RFC6797Transfer-Encoding
header, defined in
RFC7230Traits
A trait for any object that will represent a header field and value.
An extension trait adding “typed” methods to
http::HeaderMap
.