{"id":17030127,"url":"https://github.com/rob-blackbourn/jetblack-http3-example1","last_synced_at":"2025-08-25T07:17:44.624Z","repository":{"id":81915577,"uuid":"318756982","full_name":"rob-blackbourn/jetblack-http3-example1","owner":"rob-blackbourn","description":"A simple python ASGI server supporting HTTP/3","archived":false,"fork":false,"pushed_at":"2020-12-05T10:15:59.000Z","size":2,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-22T20:28:10.092Z","etag":null,"topics":["asgi","bareasgi","example","http3","hypercorn","python","python3","server"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rob-blackbourn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2020-12-05T10:13:23.000Z","updated_at":"2023-09-07T23:32:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"644b61ba-6906-419e-9278-034293212687","html_url":"https://github.com/rob-blackbourn/jetblack-http3-example1","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rob-blackbourn/jetblack-http3-example1","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-blackbourn%2Fjetblack-http3-example1","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-blackbourn%2Fjetblack-http3-example1/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-blackbourn%2Fjetblack-http3-example1/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-blackbourn%2Fjetblack-http3-example1/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rob-blackbourn","download_url":"https://codeload.github.com/rob-blackbourn/jetblack-http3-example1/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-blackbourn%2Fjetblack-http3-example1/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272022454,"owners_count":24860194,"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","status":"online","status_checked_at":"2025-08-25T02:00:12.092Z","response_time":1107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["asgi","bareasgi","example","http3","hypercorn","python","python3","server"],"created_at":"2024-10-14T08:04:31.279Z","updated_at":"2025-08-25T07:17:44.615Z","avatar_url":"https://github.com/rob-blackbourn.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# A Simple HTTP/3 Server\n\nThis is a simple HTTP/3 server using\n[hypercorn](https://pgjones.gitlab.io/hypercorn/)\nand [bareASGI](https://github.com/rob-blackbourn/bareASGI).\n\nI ran this on Ubuntu 20.04 LTS with Python 3.8 on 2020-12-05.\n\nYou will need a signed certificate and private key. There are instructions\nfor this [here](https://github.com/rob-blackbourn/ssl-certs).\n\n## Usage\n\nFirst create a virtual environment with Python 3.8 and activate it.\n\n```bash\n$ python3.8 -m venv .venv\n$ . .venv/bin/activate\n(.venv) $\n```\n\nNext install hypercorn (with http/3 support) and bareASGI.\n\n```bash\n(.venv) $ pip install hypercorn[h3] bareASGI\n```\n\nNow run the server. This must be done as root as we are using the privileged ports 80 and 443.\nAs quic requires TLS style encryption we must provide a certificate and a key.\n\nChange the certificate and key path to wherever they are on your machine.\n\n```bash\n(.venv) $ sudo .venv/bin/python http3_server.py $HOME/.keys/server.crt $HOME/.keys/server.key\n```\n\nNow browse to https://\u003chost\u003e/index.html and the page will display the version of http\nthat is being served, or you can check in the network tab of the devtools in your browser.\nThe \"protocol\" column in the network tab is not visible by default. If you right click over\nthe columns you can select it.\n\nThe only browser I've found that works on Ubuntu 20.04 LTS at the time\nof writing (2020-12-05) is the FireFox nightly build. I needed to refresh the page before\nit switched to http/3.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frob-blackbourn%2Fjetblack-http3-example1","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frob-blackbourn%2Fjetblack-http3-example1","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frob-blackbourn%2Fjetblack-http3-example1/lists"}