3.1 KiB
title | menu | weight |
---|---|---|
Requests | docs_advanced | 200 |
Content Encoding
Actix automatically decompresses payloads. The following codecs are supported:
- Brotli
- Chunked
- Compress
- Gzip
- Deflate
- Identity
- Trailers
- EncodingExt
If request headers contain a Content-Encoding
header, the request payload is decompressed
according to the header value. Multiple codecs are not supported,
i.e: Content-Encoding: br, gzip
.
JSON Request
There are several options for json body deserialization.
The first option is to use Json extractor. First, you define a handler function
that accepts Json<T>
as a parameter, then, you use the .to()
method for registering
this handler. It is also possible to accept arbitrary valid json object by
using serde_json::Value
as a type T
.
{{< include-example example="requests" file="main.rs" section="json-request" >}}
You may also manually load the payload into memory and then deserialize it.
In the following example, we will deserialize a MyObj struct. We need to load the request body first and then deserialize the json into an object.
{{< include-example example="requests" file="manual.rs" section="json-manual" >}}
A complete example for both options is available in examples directory.
Chunked transfer encoding
Actix automatically decodes chunked encoding. HttpRequest::payload()
already contains
the decoded byte stream. If the request payload is compressed with one of the supported
compression codecs (br, gzip, deflate), then the byte stream is decompressed.
Multipart body
Actix provides multipart stream support.
Multipart is implemented as
a stream of multipart items. Each item can be a
Field or a nested
Multipart stream.HttpResponse::multipart()
returns the Multipart stream
for the current request.
The following demonstrates multipart stream handling for a simple form:
{{< include-example example="requests" file="multipart.rs" section="multipart" >}}
A full example is available in the examples directory.
Urlencoded body
Actix provides support for application/x-www-form-urlencoded encoded bodies.
HttpResponse::urlencoded()
returns a
UrlEncoded future, which resolves
to the deserialized instance. The type of the instance must implement the
Deserialize
trait from serde.
The UrlEncoded future can resolve into an error in several cases:
- content type is not
application/x-www-form-urlencoded
- transfer encoding is
chunked
. - content-length is greater than 256k
- payload terminates with error.
{{< include-example example="requests" file="urlencoded.rs" section="urlencoded" >}}
Streaming request
HttpRequest is a stream of Bytes
objects. It can be used to read the request
body payload.
In the following example, we read and print the request payload chunk by chunk:
{{< include-example example="requests" file="streaming.rs" section="streaming" >}}