我的 HTTP 过滤器是否需要遵守某种协议?
头部编码/解码
在编码/解码头部期间,如果未发送本地回复并且过滤器返回
FilterHeadersStatus::StopIteration,则如果encodeData()/decodeData()返回FilterDataStatus::Continue或通过显式调用continueEncoding()/continueDecoding(),则可以恢复处理。在编码/解码头部期间,如果未发送本地回复并且过滤器返回
FilterHeadersStatus::StopAllIterationAndBuffer或FilterHeadersStatus::StopAllIterationAndWatermark,则可以通过调用continueEncoding()/continueDecoding()来恢复处理。过滤器的
decodeHeaders()实现不得在end_stream设置为 *false* 时返回FilterHeadersStatus::ContinueAndDontEndStream。在这种情况下,应返回FilterHeadersStatus::Continue。过滤器的
encode1xxHeaders()必须返回Filter1xxHeadersStatus::Continue或Filter1xxHeadersStatus::StopIteration。
数据编码/解码
在编码/解码数据期间,如果未发送本地回复并且过滤器返回
FilterDataStatus::StopIterationAndBuffer,FilterDataStatus::StopIterationAndWatermark或FilterDataStatus::StopIterationNoBuffer,则如果encodeData()/decodeData()返回FilterDataStatus::Continue或通过显式调用continueEncoding()/continueDecoding(),则可以恢复处理。
尾部编码/解码
在编码/解码尾部期间,如果未发送本地回复并且过滤器返回
FilterTrailersStatus::StopIteration,则可以通过显式调用continueEncoding()/continueDecoding()来恢复处理。
在给定的 decodeHeaders() 头部映射中是否会存在一些众所周知的头部?
解码过滤器链的第一个过滤器将在映射中包含以下头部
主机路径(这对于 CONNECT 请求可能被省略)。
尽管解码过滤器链上的某个过滤器可能会省略这些头部,但在触发终端过滤器之前,应该重新插入它们。