|
|
@@ -1,8 +1,95 @@
|
|
|
---
|
|
|
title: "Cookbook"
|
|
|
-order: 1
|
|
|
+order: 0
|
|
|
---
|
|
|
|
|
|
-This section is under construction.
|
|
|
+A collection of recipes that answer "How do I...?" questions. Each recipe is self-contained — read only what you need.
|
|
|
|
|
|
-Check back soon for a collection of recipes organized by topic.
|
|
|
+## Client
|
|
|
+
|
|
|
+### Basics
|
|
|
+- Get the response body as a string / save to a file
|
|
|
+- Send and receive JSON
|
|
|
+- Set default headers (`set_default_headers`)
|
|
|
+- Follow redirects (`set_follow_location`)
|
|
|
+
|
|
|
+### Authentication
|
|
|
+- Use Basic authentication (`set_basic_auth`)
|
|
|
+- Call an API with a Bearer token
|
|
|
+
|
|
|
+### File Upload
|
|
|
+- Upload a file as multipart form data (`make_file_provider`)
|
|
|
+- POST a file as raw binary (`make_file_body`)
|
|
|
+- Send the body with chunked transfer (Content Provider)
|
|
|
+
|
|
|
+### Streaming & Progress
|
|
|
+- Receive a response as a stream
|
|
|
+- Use the progress callback (`set_progress`)
|
|
|
+
|
|
|
+### Connection & Performance
|
|
|
+- Set timeouts (`set_connection_timeout` / `set_read_timeout`)
|
|
|
+- Set an overall timeout (`set_max_timeout`)
|
|
|
+- Understand connection reuse and Keep-Alive behavior
|
|
|
+- Enable compression (`set_compress` / `set_decompress`)
|
|
|
+- Send requests through a proxy (`set_proxy`)
|
|
|
+
|
|
|
+### Error Handling & Debugging
|
|
|
+- Handle error codes (`Result::error()`)
|
|
|
+- Handle SSL errors (`ssl_error()` / `ssl_backend_error()`)
|
|
|
+- Set up client logging (`set_logger` / `set_error_logger`)
|
|
|
+
|
|
|
+## Server
|
|
|
+
|
|
|
+### Basics
|
|
|
+- Register GET / POST / PUT / DELETE handlers
|
|
|
+- Receive JSON requests and return JSON responses
|
|
|
+- Use path parameters (`/users/:id`)
|
|
|
+- Set up a static file server (`set_mount_point`)
|
|
|
+
|
|
|
+### Streaming & Files
|
|
|
+- Stream a large file in the response (`ContentProvider`)
|
|
|
+- Return a file download response (`Content-Disposition`)
|
|
|
+- Receive multipart data as a stream (`ContentReader`)
|
|
|
+- Compress responses (gzip)
|
|
|
+
|
|
|
+### Handler Chain
|
|
|
+- Add pre-processing to all routes (Pre-routing handler)
|
|
|
+- Add response headers with a Post-routing handler (CORS, etc.)
|
|
|
+- Authenticate per route with a Pre-request handler (`matched_route`)
|
|
|
+- Pass data between handlers with `res.user_data`
|
|
|
+
|
|
|
+### Error Handling & Debugging
|
|
|
+- Return custom error pages (`set_error_handler`)
|
|
|
+- Catch exceptions (`set_exception_handler`)
|
|
|
+- Log requests (Logger)
|
|
|
+- Detect client disconnection (`req.is_connection_closed()`)
|
|
|
+
|
|
|
+### Operations & Tuning
|
|
|
+- Assign a port dynamically (`bind_to_any_port`)
|
|
|
+- Control startup order with `listen_after_bind`
|
|
|
+- Shut down gracefully (`stop()` and signal handling)
|
|
|
+- Tune Keep-Alive (`set_keep_alive_max_count` / `set_keep_alive_timeout`)
|
|
|
+- Configure the thread pool (`new_task_queue`)
|
|
|
+
|
|
|
+## TLS / Security
|
|
|
+
|
|
|
+- Choosing between OpenSSL, mbedTLS, and wolfSSL (build-time `#define` differences)
|
|
|
+- Control SSL certificate verification (disable, custom CA, custom callback)
|
|
|
+- Use a custom certificate verification callback (`set_server_certificate_verifier`)
|
|
|
+- Set up an SSL/TLS server (certificate and private key)
|
|
|
+- Configure mTLS (mutual TLS with client certificates)
|
|
|
+- Access the peer certificate on the server (`req.peer_cert()` / SNI)
|
|
|
+
|
|
|
+## SSE
|
|
|
+
|
|
|
+- Implement an SSE server
|
|
|
+- Use event names to distinguish event types
|
|
|
+- Handle reconnection (`Last-Event-ID`)
|
|
|
+- Receive SSE events on the client
|
|
|
+
|
|
|
+## WebSocket
|
|
|
+
|
|
|
+- Implement a WebSocket echo server and client
|
|
|
+- Configure heartbeats (`set_websocket_ping_interval`)
|
|
|
+- Handle connection close
|
|
|
+- Send and receive binary frames
|