HttpWebRequest默认是有缓存的.
通过设置 : webReq.Headers["Cache-Control"] = "no-cache";
或者 webReq.Headers[HttpRequestHeader.CacheControl] = "no-cache";
都可以设置httpHeaders项目 Cache-Control: no-cache 来达到无缓存读取页面的目的。
下图是通过上面的设置GET一个网页后捕获的头信息:
使用http头项目Pragma: no-cache同样可以无缓存读取页面的目的
设定方式为: webReq.Headers[HttpRequestHeader.Pragma] = "no-cache";
关于Pragma:no-cache,跟Cache-Control: no-cache相同。Pragma: no-cache兼容http 1.0 ,Cache-Control: no-cache是http 1.1提供的。因此,Pragma: no-cache可以应用到http 1.0 和http 1.1,而Cache-Control: no-cache只能应用于http 1.1.
另附上网站缓存的规则:
网站缓存的工作规则
所有的缓存都有一整套工作机制(当然,在缓存没有被禁止的前提下),其中一些规则来自于HTTP协议(扩展阅读>>)(HTTP 1.0 和 1.1),另一些则来自管理员(有可能是浏览器,也有可能是代理)。
通常来说,它们有一些共有的规则:
header响应头部分可以设置了是否进行缓存.
如果请求是经过HTTP 认证 (HTTP AUTH扩展阅读>>)或是SSL安全链接 (i.e., HTTPS),缓存也无法工作.
如果符合以下条件,缓存机制的启用是通过页面的刷新引起(不需要经过检测服务器就可以直接发送到客户端):
时间没有超过已设置的缓存页面过期时间或者其它类似 age-controlling(指示客户机可以接收生存期不大于指定时间的响应) 的设置。
缓存是最近请求时保存的,或是缓存修改的时间也是新的。
当资源过期时(使用Cache-Control标识的max-age),发现资源具有Last-Modified(Etag)声明,则再次向web服务器请求时带上头 If-Modified-Since(If-None-Match),表示客户端请求时间。web服务器收到请求后发现有头If-Modified-Since(If-None-Match)则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的cache。
特定情况— 比如, 与服务器断开连接 — 缓存会直接作为请求的响应.