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-Ranges
header, defined in RFC7233- Access
Control Allow Credentials Access-Control-Allow-Credentials
header, part of CORS- Access
Control Allow Headers Access-Control-Allow-Headers
header, part of CORS- Access
Control Allow Methods Access-Control-Allow-Methods
header, part of CORS- Access
Control Allow Origin - The
Access-Control-Allow-Origin
response header, part of CORS - Access
Control Expose Headers Access-Control-Expose-Headers
header, part of CORS- Access
Control MaxAge Access-Control-Max-Age
header, part of CORS- Access
Control Request Headers Access-Control-Request-Headers
header, part of CORS- Access
Control Request Method Access-Control-Request-Method
header, part of CORS- Age
Age
header, defined in RFC7234- Allow
Allow
header, defined in RFC7231- Authorization
Authorization
header, defined in RFC7235- Cache
Control Cache-Control
header, defined in RFC7234 with extensions in RFC8246- Connection
Connection
header, defined in RFC7230- Content
Disposition - A
Content-Disposition
header, (re)defined in RFC6266. - Content
Encoding Content-Encoding
header, defined in RFC7231- Content
Length Content-Length
header, defined in RFC7230- Content
Location Content-Location
header, defined in RFC7231- Content
Range - Content-Range, described in RFC7233
- Content
Type Content-Type
header, defined in RFC7231- Cookie
Cookie
header, defined in RFC6265- Date
Date
header, defined in RFC7231- ETag
ETag
header, defined in RFC7232- Error
- Errors trying to decode a header.
- Expect
- The
Expect
header. - Expires
Expires
header, defined in RFC7234- Host
- The
Host
header. - IfMatch
If-Match
header, defined in RFC7232- IfModified
Since If-Modified-Since
header, defined in RFC7232- IfNone
Match If-None-Match
header, defined in RFC7232- IfRange
If-Range
header, defined in RFC7233- IfUnmodified
Since If-Unmodified-Since
header, defined in RFC7232- Last
Modified Last-Modified
header, defined in RFC7232- Location
Location
header, defined in RFC7231- Origin
- The
Origin
header. - Pragma
- The
Pragma
header defined by HTTP/1.0. - Proxy
Authorization Proxy-Authorization
header, defined in RFC7235- Range
Range
header, defined in RFC7233- Referer
Referer
header, defined in RFC7231- Referrer
Policy Referrer-Policy
header, part of Referrer Policy- Retry
After - The
Retry-After
header. - SecWebsocket
Accept - The
Sec-Websocket-Accept
header. - SecWebsocket
Key - The
Sec-Websocket-Key
header. - SecWebsocket
Version - The
Sec-Websocket-Version
header. - Server
Server
header, defined in RFC7231- SetCookie
Set-Cookie
header, defined RFC6265- Strict
Transport Security StrictTransportSecurity
header, defined in RFC6797- Te
TE
header, defined in RFC7230- Transfer
Encoding Transfer-Encoding
header, defined in RFC7230- Upgrade
Upgrade
header, defined in RFC7230- User
Agent User-Agent
header, defined in RFC7231- Vary
Vary
header, 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
.