{"id":23148271,"url":"https://github.com/drkwitht/tippy_http_server","last_synced_at":"2025-07-16T08:11:13.154Z","repository":{"id":176037077,"uuid":"652920844","full_name":"DrkWithT/Tippy_Http_Server","owner":"DrkWithT","description":"Yet another toy HTTP 1.1 server from a weekend.","archived":false,"fork":false,"pushed_at":"2023-11-01T05:37:14.000Z","size":296,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-04T13:49:58.083Z","etag":null,"topics":["http-server","http11","python","speedcode","toy-project"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DrkWithT.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-13T04:04:56.000Z","updated_at":"2024-05-04T19:59:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"5ca857b4-5988-4125-a5c4-582adc9db7e9","html_url":"https://github.com/DrkWithT/Tippy_Http_Server","commit_stats":null,"previous_names":["drkwitht/tippy_http_server"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/DrkWithT/Tippy_Http_Server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DrkWithT%2FTippy_Http_Server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DrkWithT%2FTippy_Http_Server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DrkWithT%2FTippy_Http_Server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DrkWithT%2FTippy_Http_Server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DrkWithT","download_url":"https://codeload.github.com/DrkWithT/Tippy_Http_Server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DrkWithT%2FTippy_Http_Server/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265495467,"owners_count":23776634,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["http-server","http11","python","speedcode","toy-project"],"created_at":"2024-12-17T17:09:58.687Z","updated_at":"2025-07-16T08:11:13.135Z","avatar_url":"https://github.com/DrkWithT.png","language":"Python","readme":"# README\n## Project: \"Tippy\" HTTP/1.1 Server\n\n### Brief\nLately I've been on an HTTP (1.1) server writing frenzy, and I decided to try Python 3.x for implementing a toy web server. This is a toy project made only for learning purposes and to show off my skills. Finally, I credit the \"HTTP Made Really Easy\" guide and _RFC 9112_ as my references. Feel free to fork, etc.\n\n### Supported HTTP Features:\n - Basic message reading:\n    - Basic syntax checks are done.\n    - Headers such as `Host`, `Content-Length` and `Content-Type` are checked.\n - Persistent or closing connection handling.\n - HEAD and GET methods.\n - Basic cache control headers are supported.\n\n### Other Features:\n - Producer-Worker thread pooling for handling multiple connections (WIP)\n - Graceful shutdown (WIP)\n\n### Bugs:\n 1. On multiple tabs from Firefox, only one worker is providing service although another is also awake. This could be dependent on varying browser behavior on refresh. Edge / Chrome usually restarts a new connection on a random port, but Firefox seems more conservative with starting new connections?\n\n### Old Sample Run:\n\u003cimg width=\"400\" src=\"./imgs/PythonHttpServer_Test2.png\"\u003e\n\n### Some cURL Test Commands:\n - `curl --verbose -I http://localhost:8080/index.html` (HEAD of static resource)\n - `curl --verbose -X GET http://localhost:8080/index.html` (GET page)\n - `curl --verbose -X GET http://localhost:8080/info.html` (GET page)\n - `curl --verbose -X GET http://localhost:8080/index.html -H \"Connection: Close\" -H \"If-Modified-Since: Mon, 12 Jun 2023 23:59:59 GMT\"` (GET page with update date check... modify `public/index.html` to test this.)\n\n### Things To Do??\n 1. Refactor server code to be cleaner: modular, well-named, etc. (WIP)\n 2. Add URL parsing for relative and absolute URLs.\n 3. Add threading. (WIP)\n 4. Support 100 Continue. (To do...)\n\n### Usage:\n 1a. On a Mac or UNIX system, run `ifconfig -a` in the terminal and find your IPv4 address under `inet`.\n 1b. On Windows, run `ipconfig` in the shell and find your IPv4 address.\n 2. Create a `config.json` file in the project root folder. It should follow this format:\n   ```json\n   {\n      \"serveaddr\": \"localhost\",\n      \"port\": 8080,\n      \"backlog\": 4\n   }\n   ```\n 3. Run `python3 src/main.py` for Mac, or `python src/main.py` for Windows within the project root folder.\n 4. Make requests with cURL or your browser!\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrkwitht%2Ftippy_http_server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdrkwitht%2Ftippy_http_server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrkwitht%2Ftippy_http_server/lists"}