Anatomy of an HTTP Request

Wherein I talk about very little



Last time Rust 1.0 Alpha was released, and I decided to dive in and learn a little about it by creating a small (very bad and near-featurless) http server.

I decided to create something that looks vaguely like Python’s WSGI (and I do mean ‘vaguely’). Basically the process for my server will go like this:

For now, lets get into the the HTTPEnv data structure. This struct will organize all request information – method (IE get/post/delete/etc), target (URI path and GET values), version, headers, and post data.

So far, this is what I have:

struct HTTPEnv {
    method: String,
    target: String,
    version: String,
    headers: HashMap<String, String>,
    get: HashMap<String, String>,
    post: HashMap<String, String>

I’m struggling a bit with the whole ownership thing, so the String type might get switched with &str since I really don’t need the more dynamic nature of String for most of these values.

I may or may not decide to continue to pursue Rust for this project. While I’m really interested in rust, I don’t know if I’ll actually get enough benefit out of it for this particular project (which is more than just the http server portion I’m writing about). If I do stick with it, I’ll get more into the structure for responses, and the middle-ware chain that’ll be implemented.

If I don’t continue with it, well, perhaps I’ll find another use for Rust I can use to learn it more deeply!