Module headers
Expand description
typed http headers
rama 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.
use rama_http::{headers::Header, HeaderName, HeaderValue};
use rama_http_types::{header, headers};
struct Dnt(bool);
impl Header for Dnt {
fn name() -> &'static HeaderName {
&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.
- client_
hints - Http (UA) Client Hints
- util
Structs§
- Accept
Accept
header, defined in RFC7231- 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- CFConnecting
Ip - CF-Connecting-IP provides the client IP address connecting to Cloudflare to the origin web server.
- Cache
Control Cache-Control
header, defined in RFC7234 with extensions in RFC8246- Client
Ip - Client-Ip is used by some proxy software to set the real client Ip Address (known to them).
- 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- Forwarded
- Forwarding information stored as a chain.
- 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- Quality
- Represents a quality used in quality values.
- Quality
Value - Represents an item with a quality value as defined in RFC7231.
- 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- True
Client Ip - True-Client-IP provides the original client IP address to the origin web server (Cloudflare Enterprise).
- Upgrade
Upgrade
header, defined in RFC7230- User
Agent User-Agent
header, defined in RFC7231- Vary
Vary
header, defined in RFC7231- Via
- The Via general header is added by proxies, both forward and reverse.
- XClient
Ip - X-Client-Ip is used by some proxy software to set the real client Ip Address (known to them).
- XForwarded
For - The
X-Forwarded-For
(XFF) request header is a de-facto standard header for identifying the originating IP address of a client connecting to a web server through a proxy server. - XForwarded
Host - The X-Forwarded-Host (XFH) header is a de-facto standard header for identifying the original host requested by the client in the Host HTTP request header.
- XForwarded
Proto - The X-Forwarded-Proto (XFP) header is a de-facto standard header for identifying the protocol (HTTP or HTTPS) that a client used to connect to your proxy or load balancer.
- XRealIp
- X-Real-Ip is used by some proxy software to set the real client Ip Address (known to them).
Enums§
Traits§
- Forward
Header - A trait for types headers that is used by middleware which supports headers that can be converted into and from Forward data.
- Header
- A trait for any object that will represent a header field and value.
- Header
Ext - An external trait adding helper methods to types which implement
Header
trait. - Header
MapExt - An extension trait adding “typed” methods to
http::HeaderMap
.