Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uvicorn cannot handle http2 requests after installed httptools, is it a bug for httptools? #102

Open
yluuu16 opened this issue Aug 25, 2024 · 0 comments

Comments

@yluuu16
Copy link

yluuu16 commented Aug 25, 2024

env:

> conda create -n test -y python=3.10
#   _libgcc_mutex      anaconda/cloud/conda-forge/linux-64::_libgcc_mutex-0.1-conda_forge 
#   _openmp_mutex      anaconda/cloud/conda-forge/linux-64::_openmp_mutex-4.5-2_gnu 
#   bzip2              anaconda/cloud/conda-forge/linux-64::bzip2-1.0.8-h4bc722e_7 
#   ca-certificates    anaconda/cloud/conda-forge/linux-64::ca-certificates-2024.7.4-hbcca054_0 
#   ld_impl_linux-64   anaconda/cloud/conda-forge/linux-64::ld_impl_linux-64-2.40-hf3520f5_7 
#   libffi             anaconda/cloud/conda-forge/linux-64::libffi-3.4.2-h7f98852_5 
#   libgcc-ng          anaconda/cloud/conda-forge/linux-64::libgcc-ng-14.1.0-h77fa898_0 
#   libgomp            anaconda/cloud/conda-forge/linux-64::libgomp-14.1.0-h77fa898_0 
#   libnsl             anaconda/cloud/conda-forge/linux-64::libnsl-2.0.1-hd590300_0 
#   libsqlite          anaconda/cloud/conda-forge/linux-64::libsqlite-3.46.0-hde9e2c9_0 
#   libuuid            anaconda/cloud/conda-forge/linux-64::libuuid-2.38.1-h0b41bf4_0 
#   libxcrypt          anaconda/cloud/conda-forge/linux-64::libxcrypt-4.4.36-hd590300_1 
#   libzlib            anaconda/cloud/conda-forge/linux-64::libzlib-1.3.1-h4ab18f5_1 
#   ncurses            anaconda/cloud/conda-forge/linux-64::ncurses-6.5-h59595ed_0 
#   openssl            anaconda/cloud/conda-forge/linux-64::openssl-3.3.1-hb9d3cd8_3 
#   pip                anaconda/cloud/conda-forge/noarch::pip-24.2-pyhd8ed1ab_0 
#   python             anaconda/cloud/conda-forge/linux-64::python-3.10.14-hd12c33a_0_cpython 
#   readline           anaconda/cloud/conda-forge/linux-64::readline-8.2-h8228510_1 
#   setuptools         anaconda/cloud/conda-forge/noarch::setuptools-72.2.0-pyhd8ed1ab_0 
#   tk                 anaconda/cloud/conda-forge/linux-64::tk-8.6.13-noxft_h4845f30_101 
#   tzdata             anaconda/cloud/conda-forge/noarch::tzdata-2024a-h0c530f3_0 
#   wheel              anaconda/cloud/conda-forge/noarch::wheel-0.44.0-pyhd8ed1ab_0 
#   xz                 anaconda/cloud/conda-forge/linux-64::xz-5.2.6-h166bdaf_0 

> conda activate test

> pip install fastapi
# Successfully installed annotated-types-0.7.0 anyio-4.4.0 exceptiongroup-1.2.2 fastapi-0.112.2 idna-3.8 pydantic-2.8.2 pydantic-core-2.20.1 sniffio-1.3.1 starlette-0.38.2 typing-extensions-4.12.2

> pip install 'uvicorn[standard]'
# Successfully installed click-8.1.7 h11-0.14.0 httptools-0.6.1 python-dotenv-1.0.1 pyyaml-6.0.2 uvicorn-0.30.6 uvloop-0.20.0 watchfiles-0.23.0 websockets-13.0

the python code:

from fastapi import FastAPI, Request

app = FastAPI()

@app.middleware("http")
async def show_request_data(request: Request, call_next):
    print("headers: ", request.headers)
    body = await request.body()
    print(body)
    response = await call_next(request)
    return response

@app.post("/item")
def read_item(item: dict):
    return {"status": "ok", "item": item}

when i make a request with java.net.http.HttpClient, the output of the print is:

headers:  Headers({'connection': 'Upgrade, HTTP2-Settings', 'content-length': '23', 'host': 'localhost:8000', 'http2-settings': 'AAEAAEAAAAIAAAABAAMAAABkAAQBAAAAAAUAAEAA', 'upgrade': 'h2c', 'user-agent': 'Java-http-client/17.0.9', 'content-type': 'application/json; charset=utf-8'})
b''    # output of 'print(body)' (with httptools)

I uninstall httptools [pip uninstall -y httptools] and make the same request, the output is:

headers: Headers({'connection': 'Upgrade, HTTP2-Settings', 'content-length': '23', 'host': 'localhost:8000', 'http2-settings': 'AAEAAEAAAAIAAAABAAMAAABkAAQBAAAAAAUAAEAA', 'upgrade': 'h2c', 'user-agent': 'Java-http-client/17.0.9', 'content-type': 'application/json; charset=utf-8'})
b'{"id":1,"name":"test1"}'    # output of 'print(body)' (after httptools uninstalled)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant