Coffee Break Point

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

はじめに

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

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


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

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

1 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に渡すようコードを書いて、

1 bun run hoge.ts

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


1 ts-node hoge.ts

だと動く。


アレ?


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

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

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

仕方ないから

1 http_proxy= https_proxy= bun run hoge.ts

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


まとめ

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



← Back to home

©from-garage 2022 All Rights Reserved.

powered by