我们使用Apache Web Server (HTTPD)作为Angular Universal (SSR)应用程序的代理。当Angular App的响应状态码为200时,缓存工作正常。我们通过X-Cache: HIT from <url>报头确认缓存工作正常。但我们也希望Apache缓存状态代码为403或404的响应。这似乎不会发生,因为我们在响应中获得了X-Cache: MISS from <url>标头。是否可以将Apache Cache (或代理)配置为忽略错误状态代码,从而缓存此类响应?(请注意,我们需要在响应中保留错误响应状态代码...通过在apache缓存/代理配置中将403/404状态代码与200进行交换的解决方法对我们不起作用,因为我们确实需要为搜索引擎或机器人保留错误响应代码)。
发布于 2021-03-21 19:06:18
因此,在研究了这个问题并仔细阅读了Apache文档之后,我在这个页面上的"What Can be Cached?“部分找到了一个非常简单的答案。事实证明,如果你想缓存不成功的响应(例如403或404),实际的应用程序(代理目的地),也就是我们的例子是Angular SSR必须提供Cache-Control或Expires响应头。所以我们用下面的方法简单地做到了这一点,例如:
@Component({
selector: 'app-not-found',
templateUrl: './not-found.component.html',
styleUrls: ['./not-found.component.scss']
})
export class NotFoundComponent implements OnInit {
private response: Response;
constructor(
@Optional() @Inject(RESPONSE) response: any
) {
this.response = response;
}
ngOnInit(): void {
if (this.response) {
this.response.setHeader('Cache-Control', 'max-age=86400');
this.response.status(404);
}
}
}正如您可能已经了解到的,Angular SSR在默认情况下不提供任何缓存响应头。这就是为什么你需要在你的应用程序中显式设置它们的原因。
希望这对有类似问题的人有所帮助。
https://stackoverflow.com/questions/65492214
复制相似问题