我们从Asp .NET Web API为网站提供文件:
public class Startup
{
public void Configuration(IAppBuilder app)
{
var clientHostname = System.Configuration.ConfigurationManager.AppSettings["ClientHostname"];
var staticFileOptions = new StaticFileOptions()
{
OnPrepareResponse = staticFileResponseContext =>
{
staticFileResponseContext.OwinContext.Response.Headers.Add("Cache-Control", new[] { "public", "max-age=0" });
}
};
app.MapWhen(ctx => ctx.Request.Headers.Get("Host").Equals(clientHostname), app2 =>
{
app2.Use((context, next) =>
{
if (context.Request.Path.HasValue == false || context.Request.Path.ToString() == "/") // Serve index.html by default at root
{
context.Request.Path = new PathString("/Client/index.html");
}
else // Serve file
{
context.Request.Path = new PathString($"/Client{context.Request.Path}");
}
return next();
}); …Run Code Online (Sandbox Code Playgroud) 应该使用什么InputStream类型来处理将HTTP Content-Encoding设置为deflate的 URLConnection流?
对于gzip或zip的Content-Encoding,我使用GZIPInputStream,没问题.
对于"deflate"的Content-Encoding,我尝试过使用InflaterInputStream和DeflaterInputStream,但是我得到了
java.util.zip.ZipException:java.util.zip.InflaterInputStream.read中的未知压缩方法(InflaterInputStream.java:147)
我的理解是"deflate"编码是指Zlib压缩,根据文档,这应该由InflaterInputStream处理.
我不完全确定这是否属于SO,但我不知道还有什么要问的.
当我检查我的网络应用程序的加载速度时,我注意到显然没有HTTP响应(无论什么类型 - html,css,js)是压缩gzip/deflate.也就是说,任何请求中都不存在像"Content-Encoding:gzip"这样的响应标头,并且浏览器报告资源未被压缩.
以下是响应标头的示例(请注意缺少内容编码标头):

我还检查了服务器端.服务器正在运行Windows Server 2008 R2/IIS 7.5.我使用Failed Request Tracing查找服务器发送的内容.资源似乎是压缩的:

此外,服务器似乎发送正确的标头:

我的结论是:必须是Windows 8谁在这里进行干预.显然它修改了HTTP响应.我想Windows 8正在接收压缩响应,对其进行解压缩,删除内容编码头并将修改后的响应传递到管道下方.
现在我的问题:
提前感谢您的回答.
问候,安德烈
更新:我使用Wireshark查看到达客户端的内容.正如我所料,资源被压缩,内容编码头仍然存在.下图显示了wireshark协议,右下角显示了Chrome收到的响应.

这证实了我的假设,即Windows 8正在介入.
如何gzip 创建的HTTP 请求org.springframework.web.client.RestTemplate?
我正在使用Spring 4.2.6Spring Boot 1.3.5(Java SE,而不是Android或Javascript在Web浏览器中).
我正在做一些非常大的POST请求,我希望压缩请求体.
我已经看到了向ASP.Net MVC输出添加GZIP/DEFLATE压缩的一些选项,但它们似乎都在运行中应用了压缩...因此不需要缓存压缩内容.
任何启用压缩页面输出缓存的解决方案?优选地,在代码中,使得MVC代码可以检查页面是否已经改变,并且如果不是,则发出预压缩的高速缓存的内容.
这个问题也可以适用于常规的asp.net.
compression asp.net asp.net-mvc http-compression asp.net-mvc-2
我正在开发一个使用MVC4 WebAPI(RC)的项目.响应不是gzip压缩的(IIS中的动态压缩已启用).
普通MVC控制器的响应被压缩.我是否需要特定设置才能为WebAPI响应启用gzip压缩?
我可以添加一个自定义压缩处理程序,但如果可能的话,我只想使用内置的IIS压缩.
顺便说一句,我知道这几乎是压缩HTTP GET响应的重复,但是那里接受的答案并没有真正回答我的问题.
asp.net-mvc gzip http-compression asp.net-mvc-4 asp.net-web-api
如何为上传到.NET WebService(SOAP,而不是WCF)的POSTed数据启用压缩?我认为在IIS 中启用动态压缩是一件简单的事情,但在启用后,它只会压缩响应,而不是压缩POST 请求.
我已将其添加为服务引用,但我无法在生成的SOAPClient上找到任何设置来启用请求压缩.
似乎我可能在客户端缺少配置设置或代码来压缩请求,然后再将其发送到服务器?或者我正在尝试做什么(GZipping POST数据)甚至不支持?
更多信息:我在客户端和服务器上使用.NET 4.0.
我可以同时使用.htaccess:
DEFLATE
Run Code Online (Sandbox Code Playgroud)
在PHP,图像,HTML文件等+ php标题:
ob_start("gzhandler") ?
Run Code Online (Sandbox Code Playgroud)
如果不是,最好的机会是什么?我只是担心它是否会发生冲突.
在Firebug中,请求标头具有以下条目:
Accept-Encoding:gzip,deflate
但是没有:
Content-Encoding:gzip
在Response Header中.
无论我尝试过什么,在SO和其他网站上的一些答案后,似乎没有任何作用!静态文件或动态文件都没有被压缩,或者至少如果它们没有内容编码 - gzip值会在响应头中返回.
以下是我的web.config设置示例:
<urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true" />
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" minFileSizeForComp="150" staticCompressionIgnoreHitFrequency="true">
<remove name="gzip" />
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="8" dynamicCompressionLevel="8" />
</httpCompression>
Run Code Online (Sandbox Code Playgroud)
我忽略了命中频率
staticCompressionIgnoreHitFrequency="true"
我已经确认IIS实际上压缩了我可以看到的文件:
C:\ inetpub\temp\IIS临时压缩文件
如此处指定:在IIS 8 Windows 8中设置gzip
我已确保在Windows功能> Internet信息服务> WWW服务>性能功能中启用了静态和动态压缩
我也试过这个人的方法:
IIS 7.5压缩创建压缩文件但返回非压缩文件
编辑1:
IIS版本是10但我也在IIS 8.5上尝试过这个
编辑2:
我现在也尝试了在这个链接上找到的各种配置文件:https:
//github.com/h5bp/server-configs-iis/,它提供了一些看起来像'最佳实践'的web.config文件.
没解决
编辑3:
基于@Nkosi的输入,我创建了一个全新的Asp.net MVC应用程序,并使用我尝试的所有这些选项对其进行配置.这是我从Fiddler得到的原始标题:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: text/javascript; charset=UTF-8
Expires: Wed, 20 Jul 2016 18:22:47 GMT
Last-Modified: Wed, 20 …Run Code Online (Sandbox Code Playgroud) 我在我的web.config中有这个代码,用于在IIS 7.5中运行的ASP.NET 4.5网站
<system.webServer>
<urlCompression doStaticCompression="true" doDynamicCompression="true"
dynamicCompressionBeforeCache="true" />
<httpCompression>
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"
staticCompressionLevel="9" dynamicCompressionLevel="4" />
</httpCompression>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
(为了更好的阅读,我强行换了一条新线)
我想知道是否有空(没有directory ="..."和其他类似的内部元素)会导致问题,或者从IIS applicationHost.config中正确读取此部分的默认属性/元素
我在这里尝试做的只是在web.config中设置压缩和压缩比,而不覆盖或清除其他默认值.我可以从web.config中的方案中删除name ="gzip"dll ="%Windir%\ system32\inetsrv\gzip.dll",只需在scheme标签中保留staticCompressionLevel和dynamicCompressionLevel吗?是否可以从applicationHost.config中读取这些属性
http-compression ×10
asp.net ×4
http ×3
asp.net-mvc ×2
compression ×2
gzip ×2
iis ×2
java ×2
asp.net-4.5 ×1
c# ×1
http-headers ×1
iis-10 ×1
iis-7 ×1
iis-7.5 ×1
php ×1
spring ×1
web-config ×1
web-services ×1
windows-8 ×1