我有nextjs api route/api/auth/signout
,它基本上只是清除特定的cookie并发送json返回
问题是,当我在Vercel中部署项目时,这个特定的API第一次正常工作(cookie清除并给出200响应),但后来它不工作(cookie未清除并给出304响应)。
我想知道,是否有办法避免缓存只针对这条路由?
解决这个问题的最好方法是什么?
您可以为每个API端点配置Cache-Control
头
https://nextjs.org/docs/api-reference/next.config.js/headers cache - control
在您的情况下,这样做可能会奏效:
res.setHeader('Cache-Control', 'no-store')
在next.config.js
上添加此配置
async headers() {
return [
{
source: '/api/<route-name>',
headers: [
{
key: 'Cache-Control',
value: 'no-store, max-age=0',
},
],
},
];
},
这更像是对你的用例的回答,而不是问题的标题:
我认为你应该把签出http端点看作是一个有副作用的,即用户会话的破坏(即使服务器端没有发生任何事情)。对于有副作用的http端点,建议使用暗示会产生副作用的适当http方法来调用它们,例如,在这种情况下,DELETE会很好。根据http规范,对http DELETE请求的响应不应该被缓存。