在使用cors
模块时,预检请求(OPTIONS请求)的选项可以通过配置对象中的几个属性来设置。这些属性控制预检请求的响应,包括允许的方法、头部等。以下是一些关键的配置选项:
-
methods
: 指定允许的HTTP方法。这对于预检请求的响应是必需的,因为浏览器需要知道哪些方法被允许。javascript
const corsOptions = { methods: ['GET', 'POST', 'PUT', 'DELETE'], // 允许的方法 };
-
allowedHeaders
: 指定允许的HTTP头部。这些头部在预检请求的响应中会被包含在Access-Control-Allow-Headers
中。javascript
const corsOptions = { allowedHeaders: ['Content-Type', 'Authorization'], // 允许的头部 };
-
exposedHeaders
: 如果你的服务器设置了某些自定义的头部,并且希望它们在浏览器端可以被访问,可以通过exposedHeaders
属性来指定。javascript
const corsOptions = { exposedHeaders: ['Custom-Header'], // 暴露给浏览器的头部 };
-
maxAge
: 指定预检请求的结果可以被缓存多久(以秒为单位)。这可以减少预检请求的次数。javascript
const corsOptions = { maxAge: 86400, // 24小时 };
-
preflightContinue
: 默认情况下,cors
模块会终止预检请求的处理。如果你需要在预检请求之后继续处理请求,可以设置preflightContinue
为true
。javascript
const corsOptions = { preflightContinue: true, };
-
optionsSuccessStatus
: 指定预检请求的响应状态码。默认是204,但你可以设置为其他值,比如200。javascript
const corsOptions = { optionsSuccessStatus: 200, };
将这些选项组合在一起,你可以创建一个详细的CORS配置,如下所示:
javascript复制
const express = require('express');
const cors = require('cors');
const app = express();
const corsOptions = {
origin: 'https://www.us87.com',
methods: ['GET', 'POST', 'PUT', 'DELETE'],
allowedHeaders: ['Content-Type', 'Authorization'],
exposedHeaders: ['Custom-Header'],
maxAge: 86400,
preflightContinue: true,
optionsSuccessStatus: 200,
};
app.use(cors(corsOptions));
app.get('/', (req, res) => {
res.json({ message: 'This is a CORS-enabled response!' });
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
通过这种方式,你可以精细控制预检请求的行为,确保CORS策略符合你的应用需求。