ブラウザとターミナルでアクセスされるlocalhostが違った話

ブラウザとターミナルでアクセスされるlocalhostが違った話

はじめに

仕事で、社内ネットワーク越しにGHESなどにアクセスするのでzshにproxyを設定している。

あまり深く考えずproxyを使っていたので、(考えたら当たり前なのだが)最近になって色々「アレ?」ってなる経験をしたのでまとめる。

ブラウザでlocalhostにアクセスできるのにcurlだとできない

APIを開発していたときのこと、curl

curl http://localhost/hoge?fuga=piyo

みたいに打って動作確認をしようとしたが、エラーになりアクセスできない。

でもブラウザでhttp://localhost/hoge?fuga=piyo にアクセスすると実装どおりのjsonが返る。

アレ?

しばらく悩んだが、よくよく考えたらterminalはproxyを設定しているので、社内ネットワーク上のhoge?fuga=piyoを見に行こうとしていたぽい。

ブラウザはproxy関係ないのでイメージ通りPCのローカルにアクセスできてたぽい。

axiosで、Node.jsからだとアクセスできるのにBunだとアクセスできない

次、開発したAPIをTypeScriptから使おうとしたが、これまた挙動がおかしい。
proxy設定をaxiosに渡すようコードを書いて、

bun run hoge.ts

で実行したが、うまく動かない。

ts-node hoge.ts

だと動く。

アレ?

調べていると、bunのランタイムだとaxiosが独自実装されているらしく、proxyの設定を無視するんだとか。

なぜだ…ts動かすのに楽ちんで好きだったのに…。

fetchだとどちらもうまくいくっぽいけど、クライアントがaxiosで実装されていたのでどうすることもできず。

仕方ないから

http_proxy= https_proxy= bun run hoge.ts

と一時的にproxy解除して実行することで解決した。

まとめ

ネットワーク系の知識を付けましょう。