CloudRunにFastAPIをデプロイすると、FastAPIで動的に生成するエンドポイントだけ「http//」のプロトコルになります。
FastAPIでCloudRunにデプロイしたとき、あとでご説明するようなセキュリティ上のエラーが起きたので、FastAPIで動的にURLを生成したいたものは、全て固定値(相対パス)で書き換えました。とりあえずこれで問題が起きなくなるので、問題はクリティカルではないのですが、みなさんはどうしていますか?気になりました。
詳細
- FastAPIでJinjaのようなテンプレートエンジンを使う場合、エンドポイントを動的に生成したり、Staticファイルを取得するときに下記のような記述をします。
<img src="{{ request.url_for('static', path='image.jpg') }}" alt="description" />
<form method="post" action="{{ request.url_for('submit_form') }}">
<input name="data" type="text">
<input type="submit">
</form>
-
しかし、CloudRunにデプロイしてSSL認証された環境でアクセスすると、FastAPIで生成されたこれらURLのプロトコルはHTTPSではなくHTTPになってしまい(=つまり
http://…
のURLになる)、セキュリティ上のエラー(Mixed Content
)が出ます。 -
したがって、URLを固定の相対パスに書き換えました。
<img src="/.../....jpg" alt="description" />
<form method="post" action="/sample/form/">
<input name="data" type="text">
<input type="submit">
</form>
- (最初はもはや趣味の域でFastAPIの処理で
X-Forwarded-Proto
ヘッダーを書き換えたりして実験していたのですが、無駄でした)
0