Add Host
header into target uri
Previously this would lead to an abort for an empty path (`/`), because `http:/` cannot be parsed correctly. The URI becomes the `target` in `request`, so it seems best to add the `Host` header value too. Note that this is still not 100% correct: HTTP headers are case-insensitive, so it could also be `host:` or `HoSt`. Right now headers are not normalized. However it will not abort if `Host` is missing: In that case `header_get` returns an empty string and then `http:///` (three slashes) is parsed with an empty host name as expected.
This commit is contained in:
parent
9237448725
commit
53a13840bd
|
@ -149,7 +149,8 @@ export fn request_parse(file: io::handle) (request | protoerr | io::error) = {
|
||||||
case let uri: authority => return errors::unsupported;
|
case let uri: authority => return errors::unsupported;
|
||||||
case let uri: *uri::uri => yield uri;
|
case let uri: *uri::uri => yield uri;
|
||||||
case let path: str =>
|
case let path: str =>
|
||||||
const uri = fmt::asprintf("http:{}", path);
|
const host = header_get(&header, "Host");
|
||||||
|
const uri = fmt::asprintf("http://{}{}", host, path);
|
||||||
defer free(uri);
|
defer free(uri);
|
||||||
yield alloc(uri::parse(uri)!);
|
yield alloc(uri::parse(uri)!);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue