我的 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 请求可能被省略)。
尽管解码过滤器链上的某个过滤器可能会省略这些头部,但在触发终端过滤器之前,应该重新插入它们。