首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的HTTP缓存头不能工作?

为什么我的HTTP缓存头不能工作?
EN

Stack Overflow用户
提问于 2012-09-27 04:06:09
回答 1查看 159关注 0票数 2

最近,我在web服务的一些响应中添加了一些HTTP缓存头,但到目前为止,它们还没有在客户端为我做任何事情。以下是其中一个答复:

代码语言:javascript
复制
HTTP/1.1 200 OK
Cache-Control: public, max-age=60
Transfer-Encoding: chunked
Content-Type: application/vnd.com...
Expires: Thu, 27 Sep 2012 03:40:27 GMT
Server: Microsoft-IIS/7.5
Set-Cookie: DDRSSID=...
X-DDVS-Version: 1.0.0.0
X-Powered-By: ASP.NET
Date: Thu, 27 Sep 2012 03:40:22 GMT

根据Fiddler和REDbot的说法,这个响应应该是完全可缓存的。Fiddler是这么说的:

public:任何缓存都可以缓存此响应。 最大年龄:此资源将在1分钟内过期。60秒

即便如此,响应也不是来自缓存:我在Fiddler中看到了它们,我的HttpWebResponse上的HttpWebResponse属性是false。这是我请求的内容,fwiw:

代码语言:javascript
复制
GET http://floater/rest/folders/folder.20 HTTP/1.1
Accept: application/vnd.com....
Authorization: Basic blahblah
Host: floater

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-27 16:49:23

结果发现我的头像没有任何问题。相反,问题是HttpWebRequest的默认缓存策略不是HttpRequestCacheLevel.Default。我猜是我的错。

通过将以下行添加到请求初始化中,我能够看到预期的缓存结果:

代码语言:javascript
复制
webRequest.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default);

我在测试不同方面时遇到的另一个问题是,除非您阅读了整个响应,否则不会缓存响应(例如。(通过阅读到GetResponseStream()的末尾)。值得庆幸的是,在文件中注意到了这一点:

只有当检索到资源的响应流并将其读取到流的末尾时,才会将资源的副本添加到缓存中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12613924

复制
相关文章

相似问题

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