我的 HTTP 过滤器是否需要遵守某种协议?

  • 头部编码/解码

    • 在编码/解码头部期间,如果未发送本地回复并且过滤器返回 FilterHeadersStatus::StopIteration,则如果 encodeData()/decodeData() 返回 FilterDataStatus::Continue 或通过显式调用 continueEncoding()/continueDecoding(),则可以恢复处理。

    • 在编码/解码头部期间,如果未发送本地回复并且过滤器返回 FilterHeadersStatus::StopAllIterationAndBufferFilterHeadersStatus::StopAllIterationAndWatermark,则可以通过调用 continueEncoding()/continueDecoding() 来恢复处理。

    • 过滤器的 decodeHeaders() 实现不得在 end_stream 设置为 *false* 时返回 FilterHeadersStatus::ContinueAndDontEndStream。在这种情况下,应返回 FilterHeadersStatus::Continue

    • 过滤器的 encode1xxHeaders() 必须返回 Filter1xxHeadersStatus::ContinueFilter1xxHeadersStatus::StopIteration

  • 数据编码/解码

    • 在编码/解码数据期间,如果未发送本地回复并且过滤器返回 FilterDataStatus::StopIterationAndBufferFilterDataStatus::StopIterationAndWatermarkFilterDataStatus::StopIterationNoBuffer,则如果 encodeData()/decodeData() 返回 FilterDataStatus::Continue 或通过显式调用 continueEncoding()/continueDecoding(),则可以恢复处理。

  • 尾部编码/解码

    • 在编码/解码尾部期间,如果未发送本地回复并且过滤器返回 FilterTrailersStatus::StopIteration,则可以通过显式调用 continueEncoding()/continueDecoding() 来恢复处理。

在给定的 decodeHeaders() 头部映射中是否会存在一些众所周知的头部?

解码过滤器链的第一个过滤器将在映射中包含以下头部

  • 主机

  • 路径(这对于 CONNECT 请求可能被省略)。

尽管解码过滤器链上的某个过滤器可能会省略这些头部,但在触发终端过滤器之前,应该重新插入它们。