3

我正在使用 ApiController 中的异步方法,这种行为让我感到惊讶。我调用以下方法:

// GET api/values/{id}
public async Task<object> Get(int id)
{
    var received = DateTime.Now;
    await Task.Delay(10000);
    var finished = DateTime.Now;
    return new { id, received, finished };
}

从四个浏览器窗口依次访问以下 URL,每个窗口之间有大约一秒的延迟:

http://localhost:55571/api/values/1
http://localhost:55571/api/values/2
http://localhost:55571/api/values/3
http://localhost:55571/api/values/2

正如预期的那样,第一个 URL 在我启动它 10 秒后返回,紧随其后的是第二个和第三个 URL。但是,与第二个 URL 相同的第四个 URL 在第二个 URL 返回后十秒返回。

这向我表明,浏览器和我的代码之间的某些东西正在将请求序列化到相同的 URL、相同的参数集或其他东西(那么 POST、PUT 等呢?)。而不是逆向工程这个,我想问......

这种行为是否记录在某处?

编辑:我试图抓住这根稻草,但无济于事。

编辑:根据评论中的要求,时间(大致)如下:

 0 s: GET …/values/1
 1 s: GET …/values/2
 2 s: GET …/values/3
 3 s: GET …/values/2 (2nd instance)
10 s: GOT …/values/1
11 s: GOT …/values/2
12 s: GOT …/values/3
21 s: GOT …/values/2 (2nd instance)
4

1 回答 1

2

浏览器将自愿限制它们与主机的连接数。RFC 2616 (HTTP 1.1) 建议限制两个持久连接;您的浏览器似乎使用了三个限制。

于 2012-10-08T10:11:23.943 回答