Nameless 08bdaf3bd6
std.http: add http server
* extract http protocol into protocol.zig, as it is shared between client and server
* coalesce Request and Response back into Client.zig, they don't contain
  any large chunks of code anymore
* http.Server is implemented as basic as possible, a simple example below:

```zig
fn handler(res: *Server.Response) !void {
    while (true) {
        defer res.reset();

        try res.waitForCompleteHead();
        res.headers.transfer_encoding = .{ .content_length = 14 };
        res.headers.connection = res.request.headers.connection;
        try res.sendResponseHead();
        _ = try res.write("Hello, World!\n");

        if (res.connection.closing) break;
    }
}

pub fn main() !void {
    var server = Server.init(std.heap.page_allocator, .{ .reuse_address = true });
    defer server.deinit();

    try server.listen(try net.Address.parseIp("127.0.0.1", 8080));

    while (true) {
        const res = try server.accept(.{ .dynamic = 8192 });

        const thread = try std.Thread.spawn(.{}, handler, .{res});
        thread.detach();
    }
}
```
2023-04-08 09:59:35 -05:00
..
2023-04-01 14:22:44 +02:00
2023-04-06 00:57:23 -04:00
2023-03-25 14:09:00 +02:00
2023-04-05 08:23:07 +02:00
2023-04-05 08:23:07 +02:00
2023-04-08 09:59:35 -05:00
2023-03-21 15:01:45 +02:00
2023-03-05 02:59:01 -05:00
2023-04-06 00:57:23 -04:00
2022-12-13 13:14:20 +02:00
2022-11-04 00:09:27 +03:30
2023-03-19 00:39:29 -04:00
2023-02-18 19:17:21 -07:00
2022-12-13 13:14:20 +02:00
2023-03-15 10:48:15 -07:00
2023-03-03 02:37:45 -05:00
2023-02-20 09:09:05 +11:00
2023-03-15 10:48:12 -07:00
2023-04-08 09:59:35 -05:00
2022-09-11 23:18:43 -04:00
2023-03-31 22:50:31 +02:00
2023-04-06 00:57:23 -04:00
2023-04-06 07:26:07 +02:00
2023-03-17 17:50:25 +01:00
2023-03-09 14:55:13 -06:00