ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

末尾Slash(trailing slash)の有無で、APIへのリクエストがリダイレクトしたりしなかったりする謎

スポンサードリンク

最初に結論から

結論

  • FastAPIはデコレーターで指定したパス通りじゃないと、 location を返す(指定したパスがlocationに入り、ブラウザでリダイレクトが走る)
  • フレームワークやマネージドサービスによって仕様が違うっぽい?ので注意したい

環境

事象

  • axiosのBase URLをhttpsで定義しているのに、あるAPIを叩いたときにhttps環境下でhttpが混ざってるよのMixedエラーがでてきた
  • なぜ?????ってずっと「axios mixedエラー」で検索してたけど、全然それっぽい記事に出会わず混乱していた

するとこんな記事に出会う

muoilog.xyz

ほーん?スラッシュの有無でこんなことが起こるのか、とキーワードを変更してぐぐったら次はこれ。

github.com

なるほど???????フレームワーク次第みたいな話があったのと、リダイレクトが発生しているのか?ということでチェックしてみたところ、まじで発生してた。

ややこしいですが、バックエンドへのリクエストはプロキシ経由だったので、プロキシの入り口はhttpsなのですが、プロキシとバックエンドはhttpでした。なので、FastAPIはlocationにhttpでsetして返していたので、このような現象が発生したというわけ。

この辺で「trailing slash」という言葉を知りました。

実際FastAPIのtrailing slashが有るAPIを無しで叩いてみると、リダイレクトが発生しました。逆もしかり。

罠だな〜とか思ったので、調べてみると ? をつけてあげるとどっちもおkになるようです。初見だとわかりづらそう(デコレーターの引数がいいんじゃなかろうか)

github.com

そもそも、なんでtrailing slashの有無で挙動が変わるのかとかリダイレクトするのかを調べにRFCとか見に行きましたがいまいちよくわからず、歴史をまとめてくれた感じの回答もありましたが、それみてなるほど〜とは思いつつ、結局リダイレクトは?ってなったので僕の中で迷宮入りになりました。

stackoverflow.com

仕事があるので戻る。