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
- Authorization header and types.
Structs§
- Accept
Ranges Accept-Rangesheader, defined in RFC7233- Access
Control Allow Credentials Access-Control-Allow-Credentialsheader, part of CORS- Access
Control Allow Headers Access-Control-Allow-Headersheader, part of CORS- Access
Control Allow Methods Access-Control-Allow-Methodsheader, part of CORS- Access
Control Allow Origin - The
Access-Control-Allow-Originresponse header, part of CORS - Access
Control Expose Headers Access-Control-Expose-Headersheader, part of CORS- Access
Control MaxAge Access-Control-Max-Ageheader, part of CORS- Access
Control Request Headers Access-Control-Request-Headersheader, part of CORS- Access
Control Request Method Access-Control-Request-Methodheader, part of CORS- Age
Ageheader, defined in RFC7234- Allow
Allowheader, defined in RFC7231- Authorization
Authorizationheader, defined in RFC7235- Cache
Control Cache-Controlheader, defined in RFC7234 with extensions in RFC8246- Connection
Connectionheader, defined in RFC7230- Content
Disposition - A
Content-Dispositionheader, (re)defined in RFC6266. - Content
Encoding Content-Encodingheader, defined in RFC7231- Content
Length Content-Lengthheader, defined in RFC7230- Content
Location Content-Locationheader, defined in RFC7231- Content
Range - Content-Range, described in RFC7233
- Content
Type Content-Typeheader, defined in RFC7231- Cookie
Cookieheader, defined in RFC6265- Date
Dateheader, defined in RFC7231- ETag
ETagheader, defined in RFC7232- Error
- Errors trying to decode a header.
- Expect
- The
Expectheader. - Expires
Expiresheader, defined in RFC7234- Host
- The
Hostheader. - IfMatch
If-Matchheader, defined in RFC7232- IfModified
Since If-Modified-Sinceheader, defined in RFC7232- IfNone
Match If-None-Matchheader, defined in RFC7232- IfRange
If-Rangeheader, defined in RFC7233- IfUnmodified
Since If-Unmodified-Sinceheader, defined in RFC7232- Last
Modified Last-Modifiedheader, defined in RFC7232- Location
Locationheader, defined in RFC7231- Mime
- A parsed mime or media type.
- Origin
- The
Originheader. - Pragma
- The
Pragmaheader defined by HTTP/1.0. - Proxy
Authorization Proxy-Authorizationheader, defined in RFC7235- Range
Rangeheader, defined in RFC7233- Referer
Refererheader, defined in RFC7231- Referrer
Policy Referrer-Policyheader, part of Referrer Policy- Retry
After - The
Retry-Afterheader. - SecWebsocket
Accept - The
Sec-Websocket-Acceptheader. - SecWebsocket
Key - The
Sec-Websocket-Keyheader. - SecWebsocket
Version - The
Sec-Websocket-Versionheader. - Server
Serverheader, defined in RFC7231- SetCookie
Set-Cookieheader, defined RFC6265- Strict
Transport Security StrictTransportSecurityheader, defined in RFC6797- Te
TEheader, defined in RFC7230- Transfer
Encoding Transfer-Encodingheader, defined in RFC7230- Upgrade
Upgradeheader, defined in RFC7230- User
Agent User-Agentheader, defined in RFC7231- Vary
Varyheader, defined in RFC7231
Traits§
- Header
- A trait for any object that will represent a header field and value.
- Header
MapExt - An extension trait adding “typed” methods to
http::HeaderMap.