我使用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