gpt4 book ai didi

.net - IIS 8.5 中的压缩不成功,显示 ALREADY_CONTENT_ENCODING

转载 作者:行者123 更新时间:2023-12-03 18:11:11 31 4
gpt4 key购买 nike

我正在尝试调试为什么我的页面没有根据 YSLOW 进行 GZIP 压缩或压缩的问题。我最终在服务器上启用了失败的请求日志,并且能够看到它没有压缩的失败原因,它认为它已经被压缩了。

DYNAMIC_COMPRESSION_NOT_SUCCESS Reason="ALREADY_CONTENT_ENCODING"

我在 IIS 中启用了动态和静态压缩,我还更改了 web.config 文件以包含以下内容。

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true"/>

此外,在我的 aspx 页面上,我在每个页面之前(在页面加载时)调用一个方法来运行 gzip 压缩(这可能是它导致错误的原因)。

这是我从页面加载调用方法的方式

//compress page
Compression.GZipEncodePage();

这是压缩页面的方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace InitialDataEntry
{
public static class Compression
{
/// <summary>
/// Sets up the current page or handler to use GZip through a Response.Filter
/// IMPORTANT:
/// You have to call this method before any output is generated!
/// </summary>
public static void GZipEncodePage()
{
HttpResponse Response = HttpContext.Current.Response;
if (IsGZipSupported())
{
string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];
if (AcceptEncoding.Contains("deflate"))
{
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");
}
}

// Allow proxy servers to cache encoded and unencoded versions separately
Response.AppendHeader("Vary", "Content-Encoding");
}

/// <summary>
/// Determines if GZip is supported
/// </summary>
/// <returns></returns>
public static bool IsGZipSupported()
{
string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];
string IsPartial = HttpContext.Current.Request.Headers["x-microsoftajax"];

if (!string.IsNullOrEmpty(AcceptEncoding) &&
AcceptEncoding.Contains("gzip") || AcceptEncoding.Contains("deflate"))

//Just checking to see if this is a partial page update
if (string.Compare("Delta=true", IsPartial, true) == 0)
{
return false;
}
else
{
return true;
}
else
{
return false;
}
}
}
}

顺便说一下,这曾经有效,但不确定何时停止,但是我的用户意识到了这个问题,因为页面变得臃肿,以前的 500k 现在是 2mb!

如有任何帮助,我们将不胜感激。

谢谢,

最佳答案

我们在 Windows 2012 R2 服务器上遇到了类似的问题;以下步骤解决了我们的问题:

  1. 选择一个 IIS 站点,然后转到配置编辑器。
  2. 选择“system.web/caching/outputCache”部分,然后将“omitVaryStar”属性设置为“true”
  3. 选择 system.webServer,然后选择 httpCompression。
  4. 将“staticCompressionIgnoreHitFrequency”属性设置为“true” enter image description here
  5. iis重置

关于.net - IIS 8.5 中的压缩不成功,显示 ALREADY_CONTENT_ENCODING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36727068/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com