【问题标题】:Set Cache-Control: no-cache on GET requests设置 Cache-Control:GET 请求上的无缓存
【发布时间】:2013-08-23 17:46:58
【问题描述】:

我正在尝试在 GET 请求的响应中设置 Cache-Control 标头。

这适用于 OPTIONS 请求:

PreRequestFilters.Add((httpRequest, httpResponse) =>
{
   if (httpRequest.HttpMethod == "OPTIONS")
   {
      httpResponse.AddHeader("Cache-Control", "no-cache");
      httpResponse.EndServiceStackRequest();
   }
});

这对 GET 请求不起作用:

ResponseFilters.Add((httpRequest, httpResponse, dto) =>
{
   httpResponse.AddHeader("Cache-Control", "no-cache");
});

过滤器正在工作...此外,我可以使用上述方法将自己的标头添加到响应中。

我正在使用 3.9.58。

那么,这是一个错误(在 ServiceStack 中还是在我的代码中),还是由于 REST 和 GET 请求的性质而设计的?

【问题讨论】:

  • “不起作用”是什么意思?当您在客户端检查响应时,您在响应中设置的标头是否不存在?标头是否仍然存在,但正在使用缓存的值?
  • 抱歉,我的问题不是很清楚。第一个示例返回标头 Cache-Control: no-cache。第二个(“不起作用”)将返回 Cache-Control: private。我想要完成的是让第二个也返回 Cache-Control: no-cache.

标签: servicestack cors


【解决方案1】:

你不想这样做,这会终止请求:

httpResponse.EndServiceStackRequest();

这也被弃用了,如果你想短路请求并阻止未来的处理,你应该使用:

httpResponse.EndRequest();

但在这种情况下你只想添加一个标题,你不想这样做。

【讨论】:

  • 感谢您的回答... :) 关于已弃用的方法,我在 httpResponse 对象上看不到任何 .EndRequest 方法。我需要为此添加一些命名空间吗?对于 CORS 中的 OPTIONS,我只想添加标头并终止请求。代码基于您在此处给出的答案 [链接] (stackoverflow.com/questions/13741397/servicestack-cors-feature)。也许 OPTIONS 代码应该放在 ResponseFilter.Add 中?
  • 对于 CORS 示例,所需的行为是响应 OPTIONS 请求并发送 CORS HTTP 标头并结束请求 - 不应执行服务本身。我刚刚将其更新为使用 EndRequest(),这是 ServiceStack 命名空间中的扩展方法(就像 EndServiceStackRequest 一样)。
猜你喜欢
  • 2011-02-16
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
相关资源
最近更新 更多