使用 gzip 压缩组件的 D 级

发布于 2024-08-19 02:00:30 字数 1580 浏览 3 评论 0原文

我使用了 YSlow Firefox 插件,它返回以下结果:

----------------------------------- -------------------------------------------------- ----
使用 gzip 压缩组件的 D 级

有 3 个纯文本组件应压缩发送

* http://localhost:63808/WebSite/BemVindo/
* http://localhost:63808/WebSite/css/Global.css?...
* http://localhost:63808/WebSite/js/Global.js?...

-------------------------------- -------------------------------------------------- --------
所以我开始搜索并得到了这段代码:

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

现在我有了:

使用 gzip 压缩组件的 A 级

很好,嗯?问题是:Application_PreRequestHandlerExecute 事件是 gzip/deflate 请求的最佳位置吗?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

卸妝后依然美 2024-08-26 02:00:30

不确定,但您的代码可能会导致使用 Ajax 的页面出现问题。以下页面显示了类似的代码,但如果检测到 Ajax,则取消压缩: 在 ASP.NET 页面中启用 Gzip 和 Deflate HTTP 压缩。我用VB翻译了代码,但没有尝试。

埃里克·

  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

恩德·替补

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

香橙ぽ 2024-08-26 02:00:30

是的,Application_PreRequestHandlerExecute 事件是 gzip/deflate 请求的最佳位置。

Yes, the Application_PreRequestHandlerExecute event is the best place to gzip/deflate the requests.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文