执行POST时,HttpWebRequest不包含“Pragma:no-cache”标头

时间:2009-11-18 03:41:47

标签: .net debugging httpwebrequest

我正在使用具有 HttpRequestCacheLevel.Reload 的CachePolicy的HttpWebRequest。在执行GET时,请求中包含“Pragma:no-cache”标头(通过Fiddler跟踪)。但是当使用POST执行完全相同的请求时,不包括“Pragma:no-cache”标头。

这有什么理由吗?这是一个错误吗?是否有解决方法?

感谢。

编辑:只是为了更清楚我的目标。我希望使用HttpWebRequest发出我的POST请求,以包含“Pragma:no-cache”标头,无论是否需要。我认为单独将HttpWebRequest.CachePolicy设置为Reload就可以实现这一目标。我需要这个的原因是因为我正在提出请求的网站对这个标题进行了一些检查并且期待它。

1 个答案:

答案 0 :(得分:1)

HTTP 确实允许缓存对POST请求的响应。来自RFC2616,第9.5节;

  

除非响应,否则对此方法的响应不可缓存      包括适当的Cache-Control或Expires头字段。然而,      303(请参阅其他)响应可用于指导用户代理      检索可缓存的资源。

这意味着如果POST响应包括Cache-Control或Expires(或者,如果严格阅读第13节,甚至是Last-Modified或ETag之类的验证器),则响应可用于满足未来的GET请求。 1

由于POST未发送 no-cache ,因此默认情况下不会缓存响应。如果您希望帖子的响应可以缓存,则只需要发送缓存策略。