如何转发与原始头完好无损的请求
本文关键字:原始 完好无损 请求 何转发 转发 | 更新日期: 2023-09-27 18:07:33
我想写一个ASP。. NET http处理程序,其目的如下:对于传入的请求,对参数做一些检查,在数据库中查找URL,记录请求,如果一切正常,转发请求(或在响应中返回文件)。
这几乎是直截了当的。问题是该请求是部分http请求(它包含一个范围标头),而客户端期望得到部分响应。我尝试使用服务器。传输,以便将请求传输到正确的文件。像这样:
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 header。所以看起来在转移中丢失了一个头球?
我不需要做转账,这只是我认为最简单的方式。
我如何正确地进行"转移",以便我尊重部分请求?
你为什么不打电话给Asp ?Net请求处理程序直接?
你可能想从请求中读取这些头;用它们构建Web请求;例:
HttpWebRequest httpWebRequest = HttpWebRequest.Create("absolutepath") as HttpWebRequest;
httpWebRequest.Headers["Content_Length"] = this.Request.ServerVariables["Content_Length"];
httpWebRequest.Headers["Content_Range"] = this.Request.ServerVariables["Content_Range"];
// Create expects absolute path..
// you might have to build an absolute path location for the temp file
HttpWebResponse response = httpWebRequest.GetResponse() as HttpWebResponse;