我的 HTTP 過濾器是否必須遵守合約?

  • 標頭編碼/解碼

    • 在標頭的編碼/解碼過程中,如果沒有發送本地回覆,且過濾器返回 FilterHeadersStatus::StopIteration,如果 encodeData()/decodeData() 返回 FilterDataStatus::Continue,或者透過顯式呼叫 continueEncoding()/continueDecoding(),則可以恢復處理。

    • 在標頭的編碼/解碼過程中,如果沒有發送本地回覆,且過濾器返回 FilterHeadersStatus::StopAllIterationAndBufferFilterHeadersStatus::StopAllIterationAndWatermark,則可以透過呼叫 continueEncoding()/continueDecoding() 來恢復處理。

    • 當使用設定為falseend_stream 呼叫時,過濾器的 decodeHeaders() 實作不得返回 FilterHeadersStatus::ContinueAndDontEndStream。在這種情況下,應返回 FilterHeadersStatus::Continue

    • 過濾器的 encode1xxHeaders() 必須返回 Filter1xxHeadersStatus::ContinueFilter1xxHeadersStatus::StopIteration

  • 資料編碼/解碼

    • 在資料的編碼/解碼過程中,如果沒有發送本地回覆,且過濾器返回 FilterDataStatus::StopIterationAndBufferFilterDataStatus::StopIterationAndWatermarkFilterDataStatus::StopIterationNoBuffer,如果 encodeData()/decodeData() 返回 FilterDataStatus::Continue,或者透過顯式呼叫 continueEncoding()/continueDecoding(),則可以恢復處理。

  • 尾部標頭編碼/解碼

    • 在尾部標頭的編碼/解碼過程中,如果沒有發送本地回覆,且過濾器返回 FilterTrailersStatus::StopIteration,則可以透過顯式呼叫 continueEncoding()/continueDecoding() 來恢復處理。

decodeHeaders() 的指定標頭映射中,是否會出現知名的標頭?

解碼過濾器鏈的第一個過濾器將在映射中具有以下標頭

  • Host

  • Path(對於 CONNECT 請求,這可能會被省略)。

儘管這些標頭可能會被解碼過濾器鏈上的其中一個過濾器省略,但在觸發終端過濾器之前,應該重新插入這些標頭。