Reputation: 2203
I used the YSlow Firefox add-on and it return the follow result:
-----------------------------------------------------------------------------------------
Grade D on Compress components with gzip
There are 3 plain text components that should be sent compressed
* http://localhost:63808/WebSite/BemVindo/
* http://localhost:63808/WebSite/css/Global.css?...
* http://localhost:63808/WebSite/js/Global.js?...
-----------------------------------------------------------------------------------------
So I started to search and got this piece of code:
Global.asax
Private Sub Application_PreRequestHandlerExecute(ByVal sender As Object, ByVal e As EventArgs)
Dim Response As HttpResponse = HttpContext.Current.Response
Dim AcceptEncoding As String = HttpContext.Current.Request.Headers("Accept-Encoding")
If Not String.IsNullOrEmpty(AcceptEncoding) AndAlso AcceptEncoding.Contains("gzip") OrElse AcceptEncoding.Contains("deflate") Then
If AcceptEncoding.Contains("deflate") Then
Response.Filter = New System.IO.Compression.DeflateStream(Response.Filter, System.IO.Compression.CompressionMode.Compress)
Response.AppendHeader("Content-Encoding", "deflate")
Else
Response.Filter = New System.IO.Compression.GZipStream(Response.Filter, System.IO.Compression.CompressionMode.Compress)
Response.AppendHeader("Content-Encoding", "gzip")
End If
End If
Response.AppendHeader("Vary", "Content-Encoding")
End Sub
And now I have:
Grade A on Compress components with gzip
Fine, hum? The question is: Is the Application_PreRequestHandlerExecute event the best place to gzip/deflate the requests?
Upvotes: 0
Views: 2396
Reputation: 21
Not sure but your code might cause problem in pages using Ajax. The following page shows a similar code but cancel the compression if Ajax is detected: Enabling Gzip and Deflate HTTP Compression in ASP.NET pages. I translated the code in VB but didn't tried it.
Eric
Private Sub Application_PreRequestHandlerExecute(ByVal sender As Object, ByVal e As EventArgs)
Dim app As HttpApplication = TryCast(sender, HttpApplication)
Dim acceptEncoding As String = app.Request.Headers("Accept-Encoding")
Dim prevUncompressedStream As Stream = app.Response.Filter
If Not (TypeOf app.Context.CurrentHandler Is Page OrElse app.Context.CurrentHandler.[GetType]().Name = "SyncSessionlessHandler") OrElse app.Request("HTTP_X_MICROSOFTAJAX") IsNot Nothing Then
Return
End If
If acceptEncoding Is Nothing OrElse acceptEncoding.Length = 0 Then
Return
End If
acceptEncoding = acceptEncoding.ToLower()
If acceptEncoding.Contains("deflate") OrElse acceptEncoding = "*" Then
' defalte
app.Response.Filter = New DeflateStream(prevUncompressedStream, CompressionMode.Compress)
app.Response.AppendHeader("Content-Encoding", "deflate")
ElseIf acceptEncoding.Contains("gzip") Then
' gzip
app.Response.Filter = New GZipStream(prevUncompressedStream, CompressionMode.Compress)
app.Response.AppendHeader("Content-Encoding", "gzip")
End If
End Sub
Upvotes: 2
Reputation: 2203
Yes, the Application_PreRequestHandlerExecute event is the best place to gzip/deflate the requests.
Upvotes: 1