我已经使用IIS重写规则和应用程序请求路由模块在Azure云服务中设置了一个反向代理服务器(根据这里的说明,除了调用我创build的用于下载mp4文件的端点之外,一切正常,这些端点当请求包含Range头部时,可以提供部分内容。我遇到的问题是,当我直接打开服务器时,它正确地响应206(部分内容)和正确的字节范围,但有时当我点击端点通过代理服务器,它响应一个200,和全文件内容,导致在video播放错误在Chrome中。
例如:当用这样的请求直接打到服务器时:
GET server.domain.com/api/adFile/fileName使用标题:范围:bytes = 168-3922822
我正确地收到206响应。 以下是响应中的一些相关标题:
当通过反向代理点击服务器时,请求如下:
GET proxy.domain.com/api/adFile/fileName使用标题:范围:bytes = 168-3922822
我错误地收到200状态码和完整的文件内容。 这里是来自该响应的相关标题:
有什么办法可以修改代理行为来匹配主服务器的行为(即只返回部分请求的内容)? 似乎它可能会caching文件内容并在请求的字节范围接近完整文件大小时为其提供全部文件内容。
事实certificate,这个问题的修复不涉及修改反向代理服务器。 我的目标服务丢失了一个响应头,当端点能够提供部分内容时,这是必要的:Accept-Ranges头。 我修改了我的端点以包含Accept-Ranges:bytes作为响应头,这使客户端知道端点能够提供部分内容。 无论是否请求部分内容或全部内容,都会包含此响应标头。 这个头文件丢失的事实必须抛弃代理服务器,使其认为它需要返回整个文件。 在任何情况下,修复很简单,现在我的代理服务器正在愉快地处理部分内容的请求!