如何转发与原始头完好无损的请求

本文关键字:原始 完好无损 请求 何转发 转发 | 更新日期: 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;