The following code spawns a proxy server that always responds with a 302 redirect, so requests should never reach the target url, however, axios is only reaching the proxy once, and bypassing the proxy after the redirect response.
if (proxy) {
// If a proxy is used any redirects must also pass through the proxy
また、確かにリダイレクト時にプロキシサーバーを向くように設定されていますね。
if (proxy) {
// If a proxy is used any redirects must also pass through the proxy
options.beforeRedirect = function beforeRedirect(redirection) {
var location = redirection.href;
redirection.hostname = proxy.host;
redirection.host = proxy.host;
redirection.headers.host = parsed.hostname + (parsed.port ? ':' + parsed.port : '');
redirection.port = proxy.port;
redirection.path = location;
};
}
調査方針
裏付けがとれたので、これで調査方針が固まりました。
1. Web APIを呼び出す際にプロキシサーバーを使う(axiosのproxyオプションを使用する)
Webフロントエンドのアーキテクチャとしては、Single Page Application、Server Side Rendering、Static Site Generation(Static Site Generator)の3つが主流ですね。ここではそれぞれのアーキテクチャについては解説しません。
Azureでは前段にCDNを構え、ビルドで生成した静的コンテンツはAzureのストレージサービスであるBlob Storageを使ってホスティングします。Azureでは、Static Web AppsというサーバーレスのFaaSをセットにした静的コンテンツ配信用のサービスがプレビュー公開中で、今後はStatic Web Appsが主流になっていくと思います。
AWSでは前段にCloudFrontを構え、ビルドで生成した静的コンテンツはAWSのストレージサービスであるS3を使ってホスティングします。 CDNまたはCloudFrontでは、キャッシュやファイル圧縮の機能など、図に記載した機能を利用します。また、SPAの場合はクライアントサイドルーティング用の設定を忘れないようにしましょう。
ここで紹介したストレージサービスではなく、Webサーバーでコンテンツを配信することもできますが、静的コンテンツのホスティング環境を使うことで、非常にお手軽でハイパフォーマンスな構成を実現できます。