https://github.com/drkwitht/h2plus-http2-server
Attempt at creating an HTTP/2 server. WIP
https://github.com/drkwitht/h2plus-http2-server
cpp http2-server huffman-coding networking toy-project
Last synced: about 2 months ago
JSON representation
Attempt at creating an HTTP/2 server. WIP
- Host: GitHub
- URL: https://github.com/drkwitht/h2plus-http2-server
- Owner: DrkWithT
- Created: 2023-11-23T07:49:29.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-01-18T07:29:53.000Z (over 1 year ago)
- Last Synced: 2025-02-09T23:30:04.708Z (3 months ago)
- Topics: cpp, http2-server, huffman-coding, networking, toy-project
- Language: C++
- Homepage:
- Size: 316 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# README
### Brief
A simple HTTP/2 cleartext server made with C++. The purpose of this project is to help myself learn more about the web, its HTTP protocol, and review C++. I do not intend this to be production ready at all and this will take some time to get working.### WIP Screenshots
### Notes
- Only works on Unix-y systems because of the GNU Makefile.
- Create the bin and build folder at the project root for the build to work.
- Files in mains with names such as `test_*` are the unit tests.### Todos
1. ~~Make special collections: BitArray, Prefix BT~~
2. ~~HPACK Huffman encoder & decoder.~~
3. ~~HPACK header indexing table (static, dynamic).~~
4. ~~HPACK string and integer encoder & decoder.~~
5. Make HPACK context class.
- Make unit tests with mock headers. See RFC 7541 5.2 for how the Huffman flag is put by the string length.
6. Make HTTP/2 streams and other utils.
- Make `Http2Stream`.
- Consider stream priority tree and algorithm...
- Make HTTP/2 `FrameScanner` and `FrameWriter`.
- Make `Http2Connection`.
7. Create server workers.
8. Create server driver.
9. Put together thread pool implementation.
10. Finish up driver class of server.
11. Test with cURL.### Other Notes:
- Probably install and use the `s2n` SSL library because openssl is verbose.