@@ -73,6 +73,20 @@ local function exit(ctx, status)
7373 return status
7474end
7575
76+ --- Build gRPC-Web trailer chunk
77+ -- grpc-web trailer format reference:
78+ -- envoyproxy/envoy/source/extensions/filters/http/grpc_web/grpc_web_filter.cc
79+ --
80+ -- Format for grpc-web trailer
81+ -- 1 byte: 0x80
82+ -- 4 bytes: length of the trailer
83+ -- n bytes: trailer
84+ -- It using upstream_trailer_* variables from nginx, it is available since NGINX version 1.13.10
85+ -- https://nginx.org/en/docs/http/ngx_http_upstream_module.html#var_upstream_trailer_
86+ --
87+ -- @param grpc_status number grpc status code
88+ -- @param grpc_message string grpc message
89+ -- @return string grpc-web trailer chunk in byte[]
7690local build_trailer = function (grpc_status , grpc_message )
7791 local status_str = " grpc-status:" .. grpc_status
7892 local status_msg = " grpc-message:" .. ( grpc_message or " " )
@@ -194,19 +208,6 @@ function _M.body_filter(conf, ctx)
194208 ngx_arg [1 ] = chunk
195209 end
196210
197- --[[
198- upstream_trailer_* available since NGINX version 1.13.10 :
199- https://nginx.org/en/docs/http/ngx_http_upstream_module.html#var_upstream_trailer_
200-
201- grpc-web trailer format reference:
202- envoyproxy/envoy/source/extensions/filters/http/grpc_web/grpc_web_filter.cc
203-
204- Format for grpc-web trailer
205- 1 byte: 0x80
206- 4 bytes: length of the trailer
207- n bytes: trailer
208-
209- --]]
210211 if ngx_arg [2 ] then -- if eof
211212 local status = ctx .var .upstream_trailer_grpc_status
212213 local message = ctx .var .upstream_trailer_grpc_message
0 commit comments