0

我有一个ASP.NET web应用程序,其中页面(在IE中)的Microsoft Media Player对象正在发出.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)

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

我有一个相关的问题here,但在这种情况下没有范围请求。它又是一样的请求(相同的头文件,除了用户代理)。

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

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

回答

0

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

我认为VLC可以做类似于Firefox的操作,而且我知道Firefox有很多'视频下载器'类型的插件,也许有相当于IE浏览器的插件。

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

希望这有助于:)

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

+0

即使在这里(不仅在客户机器上),我在多台机器上都会遇到此问题。其中一些香草IE从安装新鲜。 – 2010-10-16 00:32:11

0

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

第二个想法:尝试返回'expires'头来抑制缓存检查。

+0

现在无法获取标题。但他们都是GET。这里是IIS日志: 2010-10-13 17:53:51 192.168.0.66 GET /sm62/controls/UMP/audioStream.aspx 200 Windows-Media-Player/9.00.00.4508 2010-10-13 17: 53:51 192.168.0.66 GET /sm62/controls/UMP/audioStream.aspx 200 Mozilla/4.0 +(兼容; + 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) – 2010-10-18 14:39:06