我的 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::StopIterationAndBuffer
、FilterDataStatus::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 请求可能会省略)。
尽管可以通过解码过滤器链上的任一过滤器省略这些标头,但应在触发终端过滤器之前重新插入它们。