OpenRasta перезаписывает заголовок Content-Length в ответах HEAD - PullRequest
2 голосов
/ 26 марта 2012

Я создаю довольно простой HTTP-сервис с использованием OpenRasta.Для запросов HEAD спецификация HTTP 1.1 гласит, что для запросов HEAD должен быть задан параметр Content-Length, равный «размеру тела объекта, который был бы отправлен, если бы запрос был GET» (раздел 14.13).

Однако OpenRasta, очевидно, видит, что тело ответа пусто, и автоматически устанавливает заголовок Content-Length в «0».

Каков рекомендуемый способ переопределить это поведение?

Спасибо -

1 Ответ

0 голосов
/ 30 марта 2012

Столкнувшись именно с этой проблемой, я решил добавить 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>();
}

На этапе предварительной обработки я переключил метод HTTP с HEAD на GET, чтобы запрос был обработан как обычно.

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;
}    

В конце конвейера заголовки ответа записываются как положено, но в тело ничего не записывается.

...