hyperium / http

Rust HTTP types
Apache License 2.0
1.16k stars 291 forks source link

Should http::Request have a canonical form? #393

Open moshevds opened 4 years ago

moshevds commented 4 years ago

Currently, libraries that use http::Request have 2 different ways to represent a request, dependent on the expected usage (client or server). This seems confusing, and I'd like to discuss if this is something that needs to be changed.

Most notably: It seems that absolute URIs are used in client contexts. But it server contexts, relative URIs with Host header are used. I propose that instead, the type should have a canonical representation that is valid in any context.

(Ideally, the canonical representation should be the only representation that is buildable, but this is a separate discussion.)

Practically, I think that using relative URIs is best, because it allows HTTP/1.0 requests where the Host header was not required. However, this requires the addition of a "scheme" field because this is currently stored in the uri field in client contexts.

What are the thoughts about this and the potential changes that it would require?