首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否也可以在错误状态响应(403或404)上启用Apache代理缓存?

是否也可以在错误状态响应(403或404)上启用Apache代理缓存?
EN

Stack Overflow用户
提问于 2020-12-29 20:34:36
回答 1查看 159关注 0票数 0

我们使用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进行交换的解决方法对我们不起作用,因为我们确实需要为搜索引擎或机器人保留错误响应代码)。

EN

回答 1

Stack Overflow用户

发布于 2021-03-21 19:06:18

因此,在研究了这个问题并仔细阅读了Apache文档之后,我在这个页面上的"What Can be Cached?“部分找到了一个非常简单的答案。事实证明,如果你想缓存不成功的响应(例如403或404),实际的应用程序(代理目的地),也就是我们的例子是Angular SSR必须提供Cache-Control或Expires响应头。所以我们用下面的方法简单地做到了这一点,例如:

代码语言:javascript
复制
@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在默认情况下不提供任何缓存响应头。这就是为什么你需要在你的应用程序中显式设置它们的原因。

希望这对有类似问题的人有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65492214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档