【Backend入門】Express.js+Typescriptでのウェブサーバ(cors)

TypeScript Expressjs

概要

cors

Cross-Origin Resource Sharingの略

corsエラー

CORSエラーは、ブラウザがあるオリジンから別のオリジンへのリクエストをブロックしたときに発生します。これは、セキュリティの一環として実装されているものです。悪意のあるウェブサイトがユーザーの知らないうちに別のサイトにリクエストを送ったりしての攻撃を防ぐためです。

corsエラー対策

オリジナルのみで完結できるウェブサービスは難しいの特定のオリジナルのみ許可するなどで目的に合ったサービスを複数のオリジナルで実現します。

  • Access-Control-Allow-Origin: このヘッダは、リソースにアクセスできるオリジンを指定します。特定のオリジンだけを許可したり、*を使用してすべてのオリジンを許可したりできますが、後者の使用はセキュリティ上のリスクを伴う場合があるため注意が必要です。
  • Access-Control-Allow-Methods: このヘッダは、許可されているHTTPメソッド(GET、POSTなど)を指定します。
  • Access-Control-Allow-Headers: このヘッダは、リクエスト中に使用できるHTTPヘッダを指定します。
Access-Control-Allow-Origin: https://www.example.com
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: Content-Type, X-Requested-With, Authorization

全てのオリジナルを許可する場合、お勧めしないが開発など必要に応じて利用する

Access-Control-Allow-Origin: *

導入

$ npm install cors
$ npm install -D @types/cors

特定のオリジンと特定のAPIメソッドのみ許可のcorsを設定する

const options: CorsOptions = {
  origin: ['url'],
  method: ['GET'],
  allowedHeaders: [ 'Authorization', 'Content-Type' ]
};

使用します。

app.use(cors(corsOptions));

全体

index.ts

import cors, { CorsOptions } from 'cors';
import express from 'express';
import dotenv from 'dotenv';
import { router } from './router';

dotenv.config();

const app = express();
const port = process.env.PORT || 3000;

const corsOptions: CorsOptions = {
  origin: ['http://localhost:3000'],
  methods: [ 'GET', 'POST', 'PUT', 'DELET' ],
  allowedHeaders: [ 'Content-Type', 'X-Requested-With',  'Authorization' ],
}

app.use(cors(corsOptions));

// ミドルウェア設定
app.use(express.json());

// 
app.use('/users',router);

app.listen(port, () => {
  console.log(`Server is running on port: ${port}`);
});
タイトルとURLをコピーしました