我的 HTTP 过滤器必须遵守合约吗?

  • 标头编码/解码

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

    • 在标头编码/解码期间,如果过滤器返回 FilterHeadersStatus::StopAllIterationAndBuffer 或者 FilterHeadersStatus::StopAllIterationAndWatermark,可以通过调用 continueEncoding()/continueDecoding() 可以恢复处理。

    • 在将 end_stream 设置为 true 的调用时,过滤器的 decodeHeaders() 实现不得返回 FilterHeadersStatus::ContinueAndEndStream。在这种情况下应该返回 FilterHeadersStatus::Continue

    • 过滤器的 encode100ContinueHeaders() 必须返回 FilterHeadersStatus::Continue 或者 FilterHeadersStatus::StopIteration

  • 数据编码/解码

    • 在数据编码/解码期间,如果过滤器返回 FilterDataStatus::StopIterationAndBufferFilterDataStatus::StopIterationAndWatermark,或者``FilterDataStatus::StopIterationNoBuffer``,则如果 encodeData()/decodeData() 返回 FilterDataStatus::Continue 或者通过显式调用 continueEncoding()/continueDecoding() 可以恢复处理。

  • Trailer 编码/解码

    • 在 Trailer 编码/解码期间,如果过滤器返回 FilterTrailersStatus::StopIteration,通过显式调用 continueEncoding()/continueDecoding() 可以恢复处理。

Are there well-known headers that will appear in the given headers map of decodeHeaders()? 是否存在将出现在 decodeHeaders() 给定标头映射中的知名标头? —————————————————————

The first filter of the decoding filter chain will have the following headers in the map: 解码过滤器链的第一个过滤器在映射中将具有以下标头:

  • Host

  • Path (对于 CONNECT 请求可能会省略)。

尽管可以通过解码过滤器链上的任一过滤器省略这些标头,但应在触发终端过滤器之前重新插入它们。