0

我有一个 ASP.NET Web 应用程序,其中页面上的 Microsoft Media Player 对象(在 IE 中)正在发出对 .aspx 网页的请求。在我TransmitFile用来发回音频文件的页面中。这在大多数情况下都可以正常工作。

但是,在某些情况下(IE 版本和特定客户端的组合,至少从我所见)会发出第二个请求,其 URL 完全相同。我可以看到的第一个和第二个请求之间的唯一区别是用户代理值。第一个请求将拥有User-Agent: Windows-Media-Player/9.00.00.4508,第二个请求将拥有User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)

这第二个请求导致音频文件第二次通过网络发送,这是一种浪费。这是我试图避免的。

我在这里有一个相关的问题,但在这种情况下,没有 Range 请求。它再次是完全相同的请求(相同的标头,除了用户代理)。

我试图用各种 HTTP 状态响应(304、404、500 等)来抑制第二个响应(基于标头中的用户代理)。这有时适用于某些客户端,但偶尔会中断(媒体播放器不会播放音频,即使 Fiddler 会显示它是在第一次请求时传输的)。

如果可能的话,我想“说服”浏览器避免第二个请求。作为第二种选择,我想找到对第二个请求的响应,该响应不会中断播放,但避免发送整个音频缓冲区。

4

2 回答 2

0

到目前为止,我唯一能想到的可能是他们安装了一个插件/工具栏,当它检测到媒体时试图做一些事情。

我认为 VLC 为 Firefox 做了类似的事情,而且我知道 Firefox 有很多“视频下载器”类型的插件,也许有为 IE 制作的等价物。

您可以尝试让有问题的客户给您他们的插件列表(应该Tools -> Manage Add-ons在 IE8 中)。

希望这可以帮助 : )

编辑:您可以检查的另一件事是要求他们尝试在您的网站上启用兼容模式,看看它是否会改变任何东西。

于 2010-10-15T23:21:12.310 回答
0

请提供完整的标头转储,您确定这两个请求都是 GET 吗?第一个请求可能只是检查缓存版本是否足够好。

第二个想法:尝试返回“过期”标头以抑制缓存检查。

于 2010-10-18T11:39:24.643 回答