IIS应用程序请求路由将部分内容更改为200

时间:2016-02-17 18:16:05

标签: azure iis asp.net-web-api azure-cloud-services arr

我使用IIS重写规则和应用程序请求路由模块(根据说明here)在天蓝云服务中设置了反向代理服务器。除了调用端点I&#外,一切正常39; ve创建用于下载mp4文件。当请求包含Range标头时,这些端点可以提供部分内容。我遇到的问题是,当我直接点击服务器时,它正确响应206(部分内容)和正确的字节范围,但有时当我通过代理服务器点击端点时,它会响应200,以及完整的文件内容,这会导致Chrome中的视频播放出错。

示例: 直接使用如下请求访问服务器时:

获取server.domain.com/api/adFile/fileName 带标题:范围:字节= 168-3922822

我正确收到206回复。以下是响应中的一些相关标题:

  • 缓存控制:无缓存
  • Pragma:no-cache
  • 内容长度:3922655
  • 内容类型:video / mp4
  • Content-MD5:f1 + K8OT8TEjvtlPU5iUY8a ==
  • 内容范围:字节168-3922822 / 3922823
  • 到期:-1
  • Last-Modified:2016年2月16日星期二15:46:46 GMT
  • ETag:" 0x8D336E86040C217"
  • 服务器:Microsoft-IIS / 8.0
  • X-AspNet-Version:4.0.30319
  • X-Powered-By:ASP.NET

当通过反向代理服务器访问服务器时,请执行以下请求:

获取proxy.domain.com/api/adFile/fileName 带标题:范围:字节= 168-3922822

我错误地收到了200状态代码和完整的文件内容。以下是该响应的相关标题:

  • 缓存控制:无缓存
  • Pragma:no-cache
  • 内容长度:3922823
  • 内容类型:video / mp4
  • Content-MD5:f1 + K8OT8TEjvtlPU5iUY8a ==
  • 到期:-1最后修改时间:2016年2月16日星期二15:46:46 GMT
  • ETag:" 0x8D336E86040C217"
  • 服务器:Microsoft-IIS / 8.5
  • X-AspNet-Version:4.0.30319
  • X-Powered-By:ASP.NET
  • X-Powered-By:ARR / 3.0
  • X-Powered-By:ASP.NET

有没有办法可以修改代理行为以匹配主服务器的行为(即只返回请求的部分内容)?它似乎可能正在缓存文件内容和当请求的字节范围接近完整文件大小时,为所有这些服务提供服务。

1 个答案:

答案 0 :(得分:0)

事实证明,此问题的修复程序不涉及修改反向代理服务器。我的目标服务缺少一个响应标头,当端点能够提供部分内容时,该标头是必需的:Accept-Ranges标头。我修改了我的端点以包含 Accept-Ranges:bytes 作为响应头,这使客户端知道端点能够提供部分内容。无论是否正在请求部分内容或完整内容,都包括此响应头。这个标题丢失的事实一定是抛弃代理服务器,使它认为它需要返回整个文件。在任何情况下,修复都很简单,现在我的代理服务器很乐意处理部分内容的请求!