PythonのFastAPIにJavaのHttpClientから接続しようとするとupgradeできないというエラーになるのでHTTP 1.1を指定する

PythonでWeb APIを実装するFastAPIというのがあって、次のようにやればなんかサーバーがたつ。

import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/hello")
def hello():
  return "hello"

uvicorn.run(app, host="0.0.0.0", port=8000)

そして、Java 11で導入されたHttpClientで接続しようとするとエラーになる。

var client = new HttpClient().newHttpClient();
var req = HttpRequest.newBuilder(URI.create("http://localhost:8000/hello")
  .get().build();
var res = client.send(req, BodyHandlers.ofString());
println(res.body());

こんな感じのエラーが返ってくる。

{"detail":[{"type":"missing","loc":["body"],"msg":"Field required","input":null}]}

でサーバー側を見るとこんなエラー

WARNING:  Unsupported upgrade request.
WARNING:  No supported WebSocket library detected. Please use "pip install 'uvicorn[standard]'", or install 'websockets' or 'wsproto' manually.
INFO:     127.0.0.1:62645 - "POST /text_embed HTTP/1.1" 422 Unprocessable Entity
WARNING:  Invalid HTTP request received.

pipでなんかインストールしろといってるけど、解決しない。

結局のところ、JavaのHttpClientがUpgdadeヘッダーつけてて、それでエラーになってる。

Connection: Upgrade, HTTP2-Settings
Content-Length: 17
Host: localhost:8001
HTTP2-Settings: AAEAAEAAAAIAAAABAAMAAABkAAQBAAAAAAUAAEAA
Upgrade: h2c

いや、サポートしてないなら無視してよって感じがするのだけど、しかたない。
HTTP1.1を指定したら大丈夫だった。

var client = HttpClient.newBuilder()
  .version(HttpClient.Version.HTTP_1_1)
  .build();