Access-Control-Max-Age
是一个 HTTP 头字段,用于指定预检请求(preflight request)的结果可以缓存多久。预检请求是浏览器在发送某些跨域请求之前自动发出的 OPTIONS 请求,以检查实际请求是否可以安全发送。
当浏览器需要向不同源的服务器发送请求时,为了确保安全性,会先发送一个 OPTIONS 请求(预检请求),询问服务器是否允许该请求。服务器通过响应头中的 Access-Control-Allow-Methods
、Access-Control-Allow-Headers
等字段告知浏览器是否允许该请求。Access-Control-Max-Age
字段则告诉浏览器可以缓存这些预检结果的时间(以秒为单位)。
原因:可能是因为 Access-Control-Max-Age
设置的值过小,或者浏览器没有正确缓存预检结果。
解决方法:
Access-Control-Max-Age
的值,例如设置为 86400
(即一天)。const express = require('express');
const app = express();
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
res.header('Access-Control-Max-Age', '86400'); // 设置缓存时间为24小时
next();
});
app.get('/data', (req, res) => {
res.json({ message: 'This is cross-origin data' });
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
原因:除了预检请求的问题外,还可能是其他 CORS 相关设置不正确。
解决方法:
Access-Control-Allow-Origin
、Access-Control-Allow-Methods
和 Access-Control-Allow-Headers
等头字段都正确设置。Access-Control-Allow-Credentials
为 true
,并注意 Access-Control-Allow-Origin
不能设置为 *
。Access-Control-Max-Age
是一个重要的 CORS 相关头字段,通过合理设置它可以显著提高跨域请求的性能。在实际应用中,应根据具体需求调整缓存时间,并确保其他 CORS 设置也正确无误。
领取专属 10元无门槛券
手把手带您无忧上云