gpt4 book ai didi

c# - HttpWebRequest.CachePolicy : questions about caching

转载 作者:太空狗 更新时间:2023-10-29 21:30:46 27 4
gpt4 key购买 nike

如果我设置我的 HttpWebRequest.CachePolicy如下:

var webRequest = (HttpWebRequest) WebRequest.Create(url);
var policy = new HttpRequestCachePolicy( HttpCacheAgeControl.MaxAge,
TimeSpan.FromMinutes(1) );
webRequest.CachePolicy = policy;

并在同一时刻对同一个 URL 发出两个异步请求,第二个请求会发生什么?第二个是否仅在第一个已缓存时完成,还是会发出 2 个请求,因为在发出时缓存中没有任何内容?

另外,在这种情况下,什么是缓存?它在哪里生活?我们是否能更好地控制它?

最佳答案

.NET 代码中的两个这样的请求将导致两个这样的 HTTP 请求,只需构建这样做的东西,运行它,然后测试服务器上发生的情况,就可以很容易地检查这些请求。

这是合适的,因为这两个请求可能会收到不同的响应,特别是考虑到其中一个可能会遇到错误而另一个不会。还有其他原因(例如,服务器可能会发送每次都不同的响应以及不应缓存的指令)。

但是,也有异常(exception)。同时发送到同一个域的请求数量有一个默认限制,这是可配置的,但默认为两个(这是经常被提示的事情,因为它在某些用例中不合适 - 但是每个服务器两个请求确实如此在大多数情况下提供最高的总吞吐量,因此它存在是有充分理由的)。

因此,这两个请求中的一个很可能会因为这条规则而被延迟,因为它正在排队。即使增加了默认限制,仍有可能超过该限制。

现在,正如 Marc 指出的那样,一旦响应流被读取到最后*,响应就可以被缓存,这可能在第二个请求开始时发生,这将导致它使用缓存的响应(如果适用)响应是可缓存的,下载时没有错误。

所以,总的来说,我们希望有两个单独的下载,我们应该对此感到高兴(以防一个有错误),但也有可能只有一个下载,因为两个“同时” "请求被迫不是同时发生的。

*实际上,虽然文档说流必须被读取到最后,但实际上它必须被读取到最后关闭,无论是手动还是通过处置它(例如来自using) 或正在执行的终结器。

关于c# - HttpWebRequest.CachePolicy : questions about caching,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4230938/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com