我使用OpenRasta创建了非常简单的HTTP服务。对于HEAD请求,HTTP 1.1规范指出HEAD请求应该将Content-Length设置为“如果请求已成为GET,本来会发送的实体主体的大小”(14.13节)。OpenRasta在HEAD响应中覆盖Content-Length标头
但是,OpenRasta显然看到响应正文为空,并自动将Content-Length标头设置为“0”。
覆盖此行为的推荐方法是什么?
Thanks-
我使用OpenRasta创建了非常简单的HTTP服务。对于HEAD请求,HTTP 1.1规范指出HEAD请求应该将Content-Length设置为“如果请求已成为GET,本来会发送的实体主体的大小”(14.13节)。OpenRasta在HEAD响应中覆盖Content-Length标头
但是,OpenRasta显然看到响应正文为空,并自动将Content-Length标头设置为“0”。
覆盖此行为的推荐方法是什么?
Thanks-
与正好面对这个问题我的解决办法是增加一个IPipelineContributor处理HEAD请求。贡献者被初始化如下:
public void Initialize(IPipeline pipelineRunner)
{
// We're going to modify the HTTP method, so allow Rasta to have a go first
pipelineRunner.Notify(PreProcessRequest).After<HttpMethodOverriderContributor>();
}
在预处理步骤I交换从HEAD HTTP方法,以允许该请求为正常进行处理得到的。
static PipelineContinuation PreProcessRequest(ICommunicationContext arg)
{
if (arg.Request.HttpMethod == "HEAD")
{
// Change the method to GET to allow normal processing
arg.Request.HttpMethod = HttpMethod.GET.ToString();
}
return PipelineContinuation.Continue;
}
在流水线结束时,响应标头按预期写入,但没有写入正文。
谢谢 - 我可能会尝试。 – 2012-04-06 12:32:16
现在,我通过不使用编解码器来处理HEAD请求(由于实际上是在编解码器中设置标头,导致一些代码重复)。相反,我只是在HEAD请求的处理程序中设置头文件,并且不会在响应中返回实体。 – 2012-03-27 17:26:11