сжатие gzip с фильтром действия не работает - PullRequest
2 голосов
/ 25 марта 2012

Я использую actionfilter, чтобы сжать gzip мои ответы от действий внутри контроллеров

Это мой фильтр действий:

Public Class CompressAttribute 
        Inherits ActionFilterAttribute 
        Implements IActionFilter 
        Public Overrides Sub OnActionExecuting(filterContext As ActionExecutingContext) 
            Dim request As HttpRequestBase = filterContext.HttpContext.Request 

            Dim acceptEncoding As String = request.Headers("Accept-Encoding") 

            If String.IsNullOrEmpty(acceptEncoding) Then 
                Return 
            End If 
            acceptEncoding = acceptEncoding.ToUpperInvariant() 

            Dim response As HttpResponseBase = filterContext.HttpContext.Response 
            If acceptEncoding.Contains("DEFLATE") Then 

                response.AppendHeader("Content-encoding", "deflate") 

                response.AppendHeader("Vary", "Accept-Encoding") 
                response.Filter = New WebCompressionFilter(response.Filter, CompressionMode.Compress) 

            ElseIf acceptEncoding.Contains("GZIP") Then 
               response.AppendHeader("Content-encoding", "gzip") 
                response.AppendHeader("Vary", "Accept-Encoding") 
                response.Filter = New WebCompressionFilter(response.Filter, CompressionMode.Compress) 
            End If 
        End Sub 
    End Class 

Я применяю это к действиям внутри моих контроллеров.

Проблема в том, что он отлично работает на моем рабочем столе в среде разработки, но на моем живом сервере (на виртуальном хостинге) он не кодирует gzip.

Вместо этого он выполняет кодирование передачи по частям ....

Почему?

это мои ответы:

среда разработки:

HTTP/1.1 200 OK

Server: ASP.NET Development Server/10.0.0.0

Date: Sun, 25 Mar 2012 04:12:29 GMT

X-AspNet-Version: 4.0.30319

p3p: CP=\'NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM\'

X-AspNetMvc-Version: 3.0

Content-Encoding: gzip

Cache-Control: private

Content-Type: text/html; charset=utf-8

Content-Length: 13411

Connection: Close

живой сервер:

HTTP/1.1 200 OK

Cache-Control: private

Content-Type: text/html; charset=utf-8

Server: Microsoft-IIS/7.5

p3p: CP=\'NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM\'

X-AspNetMvc-Version: 3.0

X-AspNet-Version: 4.0.30319

X-Powered-By: ASP.NET

Date: Sun, 25 Mar 2012 04:13:09 GMT

Transfer-Encoding: chunked

X-OSSProxy: OSSProxy 1.3.331.322 (Build 331.322 Win32 en-us)(Oct 11 2011 17:53:42)

Connection: close

1 Ответ

0 голосов
/ 07 июня 2012

Есть ли причина, по которой вы пытаетесь сделать это вручную в своем собственном коде?Эта функция уже существует в IIS:

Убедитесь, что на компьютере установлено Динамическое сжатие содержимого (пункт 5 в ссылке) и активировано в IIS .У меня никогда не было проблем с этим, когда эти шаги выполнены.После того, как вы это сделаете, вам больше не нужно будет иметь свой атрибут, IIS будет обрабатывать его для вас неявно как для статического, так и для динамического содержимого.Меньшее количество кода для поддержки всегда хорошо!

...