Ядро Asp.Net - включить сжатие Http в среде общего хостинга? - PullRequest
0 голосов
/ 24 мая 2018

Я использую общий хост с веб-приложением ASP.Net Core 2.0.Когда я запускаю приложение на локальном хосте, я вижу, что HttpCompression прекрасно работает (content-encoding: gzip) заголовок ответа возвращается для файлов JS).

После развертывания на общем хосте ответа content-encoding: gzip больше не существует.Я попытался добавить различные настройки httpCompression / urlCompression в web.config, но хостинговая компания говорит, что эти настройки отключены для моего плана.

Есть ли другой способ заставить работать сжатие Gzip, или мне нужно использоватьплан хостинга, где он включен в IIS?

Редактировать: Я также использую промежуточное программное обеспечение ResponseCompression в составе ASP.Net Core, а заголовки ответа с кодировкой содержимого по-прежнему не отображаются,Настройте код следующим образом:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddLogging();

        services.AddResponseCompression(options =>
        {
            options.Providers.Add<GzipCompressionProvider>();
        });

...
}

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {        
        if (env.IsDevelopment())
        {
            loggerFactory.AddDebug(LogLevel.Debug);
            app.UseDeveloperExceptionPage();
            app.UseBrowserLink();
        }
        else
        {
            app.UseExceptionHandler("/error");
        }

        app.UseStatusCodePagesWithRedirects("/error/{0}");
        app.UseResponseCompression();

        app.UseStaticFiles(new StaticFileOptions
        {
            OnPrepareResponse = ctx =>
            {
                ctx.Context.Response.Headers.Append("Cache-Control", "public, max-age=604800");
            }
        });

        app.UseAuthentication();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "areas",
                template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
              );

            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

        var options = new RewriteOptions()
            .AddRedirectToHttps();

        app.UseRewriter(options);
    }

1 Ответ

0 голосов
/ 24 мая 2018

Использовать промежуточное программное обеспечение сжатия ответа;добавьте ссылку на пакет Microsoft.AspNetCore.ResponseCompression или Microsoft.AspNetCore.All NuGet.См. документы .

Настройте его с помощью:

WebHost.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    {
        services.AddResponseCompression();
    })
    .Configure(app =>
    {
        app.UseResponseCompression();

        // ...
    })
    .Build();

Изменить: В комментарии ниже вы упоминаете, что ваш сайт находится на https, которыйявляется причиной, по которой сжатие ответов по умолчанию отключено, чтобы предотвратить атаки CRIME и BREACH.Вы можете повторно включить это с помощью параметра EnableForHttps.

services.AddResponseCompression(options =>
{
options.EnableForHttps = true;
options.Providers.Add<GzipCompressionProvider>();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...