I recently wrote about a new feature of Google Chrome called Instant Browsing. You can turn it on or off Basic tab of the Options page in Chrome.

If you are a web site owner/administrator and are concerned about the impact it might have on your web server to have a deluge of requests going to your server that the end user is probably not really interested in, or having a number of requests going to your server that result in a 404 resource not found because the half formed URL in the “omnibox” does not actually resolve to a real page then you can opt out.
For folks running ASP.NET (both WebForms and MVC) I’ve created a simple HTTP Module that will opt your site out if it encounters requests from Chromes’ Instant Browsing.
You can download the Module here: Instant Browsing HTTP Module V1. And to activate it in your application you need to add the DLL file as a reference to your application and then add the bolded line to your web.config.
<configuration> <system.web> <httpModules> <add name="InstantBrowsingOptOut" type="InstantBrowsing.InstantBrowsingOptOut, InstantBrowsing"/> </httpModules> </system.web> </configuration>
The Code
If you prefer, you can add the following source to your application and compile it yourself.
using System;
using System.Collections.Specialized;
using System.Web;
namespace InstantBrowsing
{
public class InstantBrowsingOptOut : IHttpModule
{
public void Dispose()
{
// Nothing to dispose. Required by IHttpModule
}
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(BeginRequest);
}
void BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
string headerValue = GetPurposeHeaderValue(application.Request);
if (HeaderValueDoesntExist(headerValue))
return;
if (PreviewMode(headerValue))
Issue403Forbidden(application.Response);
}
private bool PreviewMode(string value)
{
return value.ToLowerInvariant().Contains("preview");
}
private bool HeaderValueDoesntExist(string value)
{
return string.IsNullOrEmpty(value);
}
private string GetPurposeHeaderValue(HttpRequest request)
{
NameValueCollection headers = request.Headers;
return headers["X-Purpose"];
}
private void Issue403Forbidden(HttpResponse response)
{
response.Clear();
response.StatusCode = 403;
response.End();
}
}
}
And to activate it in your application you need to add the bolded line to your web.config.
<configuration> <system.web> <httpModules> <add name="InstantBrowsingOptOut" type="InstantBrowsing.InstantBrowsingOptOut, InstantBrowsing"/> </httpModules> </system.web> </configuration>
Note that the second “InstantBrowsing” in the type attribute is the assembly, so if you’ve put it in an assembly with a different name you’ll need to change the type attribute to reflect that.
