这个问题通常发生在使用 Apollo Client RetryLink 时,因为 RetryLink 在出现网络错误时对 Apollo Client 进行重试,但在某些情况下,重试请求不存在响应头。
下面是一种解决方案,在 RetryLink 中添加一个自定义请求头:
import { RetryLink } from 'apollo-link-retry';
const retryLink = new RetryLink({
delay: {
initial: 300,
max: Infinity,
jitter: true
},
attempts: {
max: 5,
retryIf: (error, _operation) => {
if (error.message.includes('network')) {
// 添加请求头
_operation.setContext({
headers: {
'X-Retry-Count': `${_operation.getContext().retryCount}`
}
});
return true;
}
return false;
}
},
});
在这种情况下,当 RetryLink 重试请求时,它将添加一个名为 "X-Retry-Count" 的请求头,其中包含尝试次数的数字。这将帮助您追踪这些重试请求,并确保正确设置响应头。