Module hyper::header
[−]
[src]
Headers container, and common header fields.
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
Hyper provides many of the most commonly used headers in HTTP. If
you need to define a custom header, it's easy to do while still taking
advantage of the type system. Hyper includes a header!
macro for defining
many wrapper-style headers.
#[macro_use] extern crate hyper; use hyper::header::Headers; header! { (XRequestGuid, "X-Request-Guid") => [String] } fn main () { let mut headers = Headers::new(); headers.set(XRequestGuid("a proper guid".to_owned())) }
This works well for simple "string" headers. If you need more control, you can implement the trait directly.
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 std::fmt; use hyper::header::{self, Header, Raw}; #[derive(Debug, Clone, Copy)] struct Dnt(bool); impl Header for Dnt { fn header_name() -> &'static str { "DNT" } fn parse_header(raw: &Raw) -> hyper::Result<Dnt> { if raw.len() == 1 { let line = &raw[0]; if line.len() == 1 { let byte = line[0]; match byte { b'0' => return Ok(Dnt(true)), b'1' => return Ok(Dnt(false)), _ => () } } } Err(hyper::Error::Header) } fn fmt_header(&self, f: &mut header::Formatter) -> fmt::Result { let value = if self.0 { "1" } else { "0" }; f.fmt_line(&value) } }
Modules
parsing |
Utility functions for Header implementations. |
Structs
Accept |
|
AcceptCharset |
|
AcceptEncoding |
|
AcceptLanguage |
|
AcceptRanges |
|
AccessControlAllowCredentials |
|
AccessControlAllowHeaders |
|
AccessControlAllowMethods |
|
AccessControlExposeHeaders |
|
AccessControlMaxAge |
|
AccessControlRequestHeaders |
|
AccessControlRequestMethod |
|
Allow |
|
Authorization |
|
Basic |
Credential holder for Basic Authentication |
Bearer |
Token holder for Bearer Authentication, most often seen with oauth |
CacheControl |
|
Connection |
|
ContentDisposition |
A |
ContentEncoding |
|
ContentLanguage |
|
ContentLength |
|
ContentLocation |
|
ContentRange |
|
ContentType |
|
Cookie |
|
CookieIter |
Iterator for cookie. |
Date |
|
ETag |
|
EntityTag |
An entity tag, defined in RFC7232 |
Expires |
|
Formatter |
A formatter used to serialize headers to an output stream. |
From |
|
HeaderView |
Returned with the |
Headers |
A map of header fields on requests and responses. |
HeadersItems |
An |
Host |
The |
HttpDate |
A timestamp with HTTP formatting and parsing |
IfModifiedSince |
|
IfUnmodifiedSince |
|
LanguageTag |
A language tag as described in BCP47. |
LastEventId |
|
LastModified |
|
Link |
The |
LinkValue |
A single |
Location |
|
Origin |
The |
Prefer |
|
PreferenceApplied |
|
Protocol |
Protocols that appear in the |
Quality |
Represents a quality used in quality values. |
QualityItem |
Represents an item with a quality value as defined in RFC7231. |
Raw |
A raw header value. |
Referer |
|
Server |
|
SetCookie |
|
StrictTransportSecurity |
|
Te |
|
TransferEncoding |
|
Upgrade |
|
UserAgent |
|
Warning |
|
Enums
AccessControlAllowOrigin |
The |
ByteRangeSpec |
Each |
CacheDirective |
|
Charset |
A Mime charset. |
ConnectionOption |
Values that can be in the |
ContentRangeSpec |
Content-Range, described in RFC7233 |
DispositionParam |
A parameter to the disposition type. |
DispositionType |
The implied disposition of the content of the HTTP body. |
Encoding |
A value to represent an encoding used in |
Expect |
The |
IfMatch |
|
IfNoneMatch |
|
IfRange |
|
MediaDesc |
A Media Descriptors Enum based on: https://www.w3.org/TR/html401/types.html#h-6.13 |
Pragma |
The |
Preference |
Prefer contains a list of these preferences. |
ProtocolName |
A protocol name used to identify a specific protocol. Names are case-sensitive
except for the |
Range |
|
RangeUnit |
Range Units, described in RFC7233 |
ReferrerPolicy |
|
RelationType |
A Link Relation Type Enum based on: RFC5988 |
RetryAfter |
The |
Vary |
|
Traits
Header |
A trait for any object that will represent a header field and value. |
Scheme |
An Authorization scheme to be used in the header. |
Functions
q |
Convenience function to create a |
qitem |
Convenience function to wrap a value in a |