如果我收到Spider的请求,我会启动Phantom JS进程并回放动态HTML。 (使用OnExecuting过滤器并设置ActionResult)
但是OutputCache过滤器也适用于这个方法,它正在阻碍它!。
E.G:
步骤1.使用普通用户代理加载页面。 (输出缓存缓存URL) 步骤2.使用spider用户代理加载页面。 (之前的缓存响应被发送到蜘蛛,我的Phantom JS过滤器永远不会运行)
答案 0 :(得分:1)
当请求来自搜索引擎抓取工具时,使用VaryByCustom
强制“缓存未命中”。
在Controller/Action
:
[OutputCache(VaryByCustom="Crawler")]
public ActionResult Index()
{
// ...
return View();
}
然后在Global.asax
:
public override string GetVaryByCustomString(HttpContext context, string arg)
{
if (arg == "Crawler" && context.Request.Browser.Crawler)
return Guid.NewGuid().ToString();
return base.GetVaryByCustomString(context, arg);
}