サイトアイコン IT NEWS

Node.jsでのCORSエラーの原因と解決策

Web開発において、異なるオリジンからのAPIリクエストがブロックされることは、良く見られる問題です。
この問題は「静的コンテンツ」や「セキュリティ」に関わり、サーバー側の設定を適切に行うことで解決できます。
本記事は、CORSエラーの原因とその解決策を簡単な記事としてまとめました。

エラーメッセージ

Access to XMLHttpRequest at 'https://api.example.com/signIn' from origin 'https://example.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

<?xml version="1.0" encoding="UTF-8"?>
<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>REQUEST_ID_MASKED</RequestId>
    <HostId>HOST_ID_MASKED</HostId>
</Error>

原因

この問題は、CORS (Cross-Origin Resource Sharing) と呼ばれるセキュリティメカニズムに関連しています。
ブラウザは、異なるオリジンからのAPIリクエストを即床に認めるのではなく、これを明示的に許可される必要があります。
この場合、リクエストされたAPIは、指定されたオリジンからのリクエストを許可していません。

解決策

この問題を解決するためには、サーバー側の設定を要件に合わせて修正する必要があります。

1. サーバー側のCORS設定を修正

Node.jsExpress を使用している場合、下記のようなコードでCORS許可を設定することができます。

const express = require('express');
const cors = require('cors');
const app = express();

// CORS設定を適用
app.use(cors({
  origin: 'https://example.com', // 許可するオリジン
}));

app.get('/signIn', (req, res) => {
  res.send('Hello World');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

2. AWS API GatewayのCORS設定

AWS API Gateway を使用している場合、「Enable CORS」オプションを有効にします。
設定はコンソールから実行できます。

3. S3バケットのCORS設定

S3バケットを使用してデータをホストしている場合、下記のようにデータを設定します。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <CORSRule>
    <AllowedOrigin>https://view.example.com</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
  </CORSRule>
</CORSConfiguration>

まとめ

CORSは、簡単に見えながら、セキュリティに関する重要な要素です。
しかし、これを理解し、適切な設定を実施することで、Webアプリケーションがスムーズに動作するだけでなく、安全性も向上します。
本記事で紹介した解決策を参考に、自身のプロジェクトに適用してみてください。

また、問題を根本から理解することも重要です。
公式ドキュメントや関連する資料を読むことで、より深い知識を得ることができます。

さらにヒント

デバッグを活用

ブラウザのデベロッパーツールを使用して、リクエストヘッダーやレスポンスヘッダーを確認しましょう。

テスト環境の設定

本番環境と同様の設定をテスト環境で再現することで、リスクを最小限に抑えながら変更を適用できます。

セキュリティを最優先

許可するオリジンやメソッドを最小限にすることで、不正なアクセスを防ぎます。

以上!本記事が皆さんの開発の助けとなることを願っています!

モバイルバージョンを終了