首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wininet不缓存压缩内容

Wininet不缓存压缩内容
EN

Stack Overflow用户
提问于 2015-03-17 01:21:36
回答 1查看 257关注 0票数 0

我有一个压缩资源,当在IE中查看时,按预期从缓存加载。但是,当我的应用程序加载相同的URL时,Wininet会忽略缓存并始终从服务器下载内容。在IIS上禁用动态内容压缩的情况下,我的应用程序的行为与IE相同( HTTP包含一个不匹配的标头)。

我怎样才能让我的应用程序的行为与IE一样?

代码语言:javascript
复制
_httpClient = new HttpClient(new WebRequestHandler
{
    CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default),
    AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip
});

using (Task<HttpResponseMessage> tget = _httpClient.GetAsync(uri, HttpCompletionOption.ResponseHeadersRead, _cancel))
{
    tget.Wait();
    response = tget.Result;
}

我的应用程序的GET的HTTP头:

代码语言:javascript
复制
GET https://beautykiosktest.coinstar.com/conductor/configuration/files/Promos.xml?kioskid=ENG20130027 HTTP/1.1
Accept: */*
Accept-Language: en-US
User-Agent: ConfigurationService/2.3.0.0
Host: beautykiosktest.coinstar.com
Accept-Encoding: gzip, deflate

HTTP/1.1 200 OK
Cache-Control: max-age=30
Transfer-Encoding: chunked
Content-Type: application/xml; charset=utf-8
Content-Encoding: gzip
ETag: "cHmrX5Fp2Z+ETV/qIXiS2A=="
Vary: Accept-Encoding
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 17 Mar 2015 00:39:18 GMT

我希望IE得到304的回复

代码语言:javascript
复制
GET https://beautykiosktest.coinstar.com/conductor/configuration/files/Promos.xml?kioskid=ENG20130027 HTTP/1.1
Accept: image/jpeg, image/gif, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.1.4322)
Accept-Encoding: gzip, deflate
Host: beautykiosktest.coinstar.com
If-None-Match: "cHmrX5Fp2Z+ETV/qIXiS2A=="
DNT: 1
Connection: Keep-Alive

HTTP/1.1 304 Not Modified
Cache-Control: max-age=30
ETag: "cHmrX5Fp2Z+ETV/qIXiS2A=="
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 17 Mar 2015 00:42:13 GMT
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-27 17:25:13

最后,我向微软提交了一张罚单,以解决这个问题,并发现.NET 4中存在一个导致此问题的错误。问题是,从带有可变头的响应中填充的缓存条目在下一个get上没有得到正确的匹配,因为即使设置了AutomaticDecompression属性,.NET在执行WinINET缓存测试之前也没有在请求中添加WinINET编码头。

解决方法/修复方法是在使用HttpClient实例之前向它添加一个"Accept-Encoding“默认标头。

代码语言:javascript
复制
_httpClient.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29089804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档