当前位置: 首页 > article >正文

Node.js 中 cors 依赖详解

`cors` 是一个用于处理跨域资源共享(Cross - Origin Resource Sharing,CORS)问题的 Node.js 中间件,在前后端分离开发的项目中经常会用到。

一、跨域问题概述

在浏览器中,出于安全考虑,遵循同源策略,即浏览器只允许访问同源(协议、域名、端口都相同)的资源。当浏览器向不同源的服务器发起请求时,就会受到浏览器的跨域限制,导致请求被阻止。CORS 是一种现代的跨域解决方案,允许服务器在响应头中设置一些字段,告诉浏览器该请求是被允许的。

1. 安装 `cors`

# 使用 npm 安装

npm install cors

2. 基本使用

将 `cors` 中间件应用到整个 Express 应用,这意味着所有路由都允许跨域请求。当客户端(如浏览器)发起对 `/data` 路由的请求时,服务器会在响应头中添加必要的 CORS 相关字段,从而允许跨域访问。

const express = require("express");

const cors = require("cors");

const app = express();

// 使用 cors 中间件

app.use(cors());

app.get("/data", (req, res) => {

  res.json({ message: "This is some data from the server" });

});

const port = 3000;

app.listen(port, () => {

  console.log(`Server running on port ${port}`);

});

二、配置选项

`cors` 中间件提供了多种配置选项,以满足不同的跨域需求。

1. `origin`

用于指定允许跨域请求的源(origin)。可以是一个字符串、一个数组,或者是一个函数。

// 允许单个源

const corsOptions = {

  origin: "http://example.com",

};

app.use(cors(corsOptions));

// 允许多个源

const corsOptionsMultiple = {

  origin: ["http://example1.com", "http://example2.com"],

};

app.use(cors(corsOptionsMultiple));

// 使用函数动态配置 origin

const corsOptionsFunction = {

  origin: (origin, callback) => {

    const allowedOrigins = ["http://example.com", "http://test.com"];

    if (!origin || allowedOrigins.includes(origin)) {

      callback(null, true);

    } else {

      callback(new Error("Not allowed by CORS"));

    }

  },

};

app.use(cors(corsOptionsFunction));

2. `methods`

用于指定允许的 HTTP 请求方法,默认值为 `'GET,HEAD,PUT,PATCH,POST,DELETE'`。

const corsOptionsMethods = {

  methods: "GET,POST",

};

app.use(cors(corsOptionsMethods));

3. `allowedHeaders`

用于指定允许的请求头,默认情况下,浏览器会自动处理一些常见的请求头。如果需要自定义请求头,可以使用该选项。

const corsOptionsHeaders = {

  allowedHeaders: "Content-Type,Authorization",

};

app.use(cors(corsOptionsHeaders));

4. `exposedHeaders`

用于指定允许客户端访问的响应头。默认情况下,浏览器只能访问一些简单的响应头,通过该选项可以暴露更多的响应头给客户端。

const corsOptionsExposed = {

  exposedHeaders: "X-Custom-Header",

};

app.use(cors(corsOptionsExposed));

5. `credentials`

一个布尔值,指示是否允许客户端在跨域请求中携带凭证(如 cookies、HTTP 认证等)。默认值为 `false`。

const corsOptionsCredentials = {

  credentials: true,

};

app.use(cors(corsOptionsCredentials));

6. 针对特定路由使用 `cors`

除了将 `cors` 应用到整个应用,还可以针对特定的路由使用 `cors` 中间件。

const express = require("express");

const cors = require("cors");

const app = express();

const corsOptions = {

  origin: "http://example.com",

};

// 只允许特定路由跨域

app.get("/data", cors(corsOptions), (req, res) => {

  res.json({ message: "This is some data from the server" });

});

const port = 3000;

app.listen(port, () => {

  console.log(`Server running on port ${port}`);

});


http://www.kler.cn/a/551744.html

相关文章:

  • MVTEC数据集笔记
  • 【C++】Basic Data Types and Operators
  • C# 适合做什么项目?全面解析 C# 的应用领域与优势
  • C语言——指针基础知识
  • 六、敏捷开发工具:项目管理工具
  • Ubuntu22.04系统安装使用Docker
  • 【个人总结】7. Linux 工作三年的嵌入式常见知识点梳理及开发技术要点(欢迎指正、补充)
  • 从零开始构建一个小型字符级语言模型的详细教程(基于Transformer架构)之二模型架构设计
  • 高效执行自动化用例:分布式执行工具pytest-xdist实战!
  • 分布式理论与分布式算法
  • TS .d.ts 到底怎么用?
  • 【小白学AI系列】NLP 核心知识点(七)Embedding概念介绍
  • 构建高效 Python Web 应用:框架与服务器的选择及实践
  • 【NLP 25、模型训练方式】
  • Spring Boot实现跨域
  • Unity项目实战-订阅者发布者模式
  • C语言——指针进阶应用
  • 利用分治策略优化快速排序
  • 2013年下半年软件设计师上午题考察知识点及其详细解释(附真题及答案解析)
  • MAVEN学习