【发布时间】:2011-09-06 19:01:13
【问题描述】:
我正在尝试编写一个 ASP.NET http 处理程序,其目的如下: 在收到请求时,检查参数,在数据库中查找 URL,记录请求,如果一切正常,则转发请求(或在响应中返回文件)。
这几乎是直截了当的。问题是该请求是部分 http 请求(它包含一个范围标头),并且客户端期望部分响应。我尝试使用 server.transfer 将请求传输到正确的文件。像这样的:
public class Redirecter : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//Check stuff
............
if( everyThingOk )
{
context.Server.Transfer("/Temp/the/file");
}
else
{
//respond with some error
}
}
........
}
问题是传输似乎不尊重原始请求标头。我没有为我将请求重定向到的 URL 安装任何处理程序或任何东西,所以我只希望它是一个正常的文件下载。 但由于原始请求包含 Range 标头,我希望响应是部分响应,但它不是 。
请求:
GET /Some/file HTTP/1.1
Range:bytes=0-4999 <----only want 5000 bytes
回复:
HTTP/1.1 200 OK <-------- what? Expected 206!
Server:ASP.NET Development Server/10.0.0.
Date:Tue, 06 Sep 2011 09:21:07 GMT
X-AspNet-Version:4.0.30319
Cache-Control:private
Content-Type:text/html
Content-Length:79051 <----- too large, only expected 5000 bytes max
Connection:Close
而且我也缺少 Content-Range 标头。所以好像在传输中丢失了一个标头?
我不需要进行转移,这是我认为最简单的方法。
如何正确地进行“转移”以尊重部分请求?
【问题讨论】:
-
请不要在标题前加上“ASP.NET”。在Stack Overflow 上,我们为此目的使用标签。