@@ -812,6 +812,8 @@ ngx_http_wasm_resp_get_headers(ngx_http_request_t *r, int32_t addr, int32_t size
812
812
ngx_uint_t i ;
813
813
u_char * content_length_hdr = NULL ;
814
814
u_char content_length_hdr_len = 0 ;
815
+ u_char * status_length_hdr = NULL ;
816
+ u_char status_length_hdr_len = 0 ;
815
817
char * lowcase_key ;
816
818
char * val ;
817
819
ngx_list_part_t * part ;
@@ -885,6 +887,20 @@ ngx_http_wasm_resp_get_headers(ngx_http_request_t *r, int32_t addr, int32_t size
885
887
size += sizeof ("transfer-encoding" ) + sizeof ("chunked" );
886
888
}
887
889
890
+ if (r -> headers_out .status ) {
891
+ count ++ ;
892
+ status_length_hdr = ngx_pcalloc (r -> pool , NGX_INT_T_LEN );
893
+ if (status_length_hdr == NULL ) {
894
+ ngx_log_error (NGX_LOG_ERR , log , 0 , "no memory" );
895
+ return PROXY_RESULT_INTERNAL_FAILURE ;
896
+ }
897
+
898
+ status_length_hdr_len = ngx_snprintf (status_length_hdr , NGX_INT_T_LEN , "%ui" ,
899
+ r -> headers_out .status ) - status_length_hdr ;
900
+
901
+ size += sizeof (":status" ) + status_length_hdr_len + 1 ;
902
+ }
903
+
888
904
size += 4 + count * 2 * 4 ;
889
905
buf = ngx_http_wasm_get_buf_to_write (log , size , addr , size_addr );
890
906
if (buf == NULL ) {
@@ -953,6 +969,13 @@ ngx_http_wasm_resp_get_headers(ngx_http_request_t *r, int32_t addr, int32_t size
953
969
proxy_wasm_map_reserve_literal (& it , "transfer-encoding" , "chunked" );
954
970
}
955
971
972
+ if (status_length_hdr != NULL ) {
973
+ proxy_wasm_map_reserve (& it , & lowcase_key , sizeof (":status" ) - 1 ,
974
+ & val , status_length_hdr_len );
975
+ ngx_memcpy (lowcase_key , ":status" , sizeof (":status" ) - 1 );
976
+ ngx_memcpy (val , status_length_hdr , status_length_hdr_len );
977
+ }
978
+
956
979
return PROXY_RESULT_OK ;
957
980
}
958
981
0 commit comments