<div dir="ltr">Thanks Dounin,<div>After stepping through the code, I came to the same conclusion but wanted to check just in case I missed something. Thanks for the help.</div><div><br></div><div>-Dk</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Sep 30, 2022 at 2:32 AM Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hello!<br>
<br>
On Thu, Sep 29, 2022 at 04:47:43PM -0700, Dk Jack wrote:<br>
<br>
> Hi,<br>
> In my module I have a body filter. In the body filter, I respond with a 4XX<br>
> if the body contains a matching pattern. This is working correctly.<br>
> <br>
> However, I would like to send a custom response message when the above<br>
> situation occurs. I tried doing this by attaching a buffer to the output<br>
> headers and calling send header before returning from the filter handler as<br>
> shown below.<br>
> <br>
> -----------------------------------------------------------------------<br>
>   r->err_status = http_status;<br>
>   r->headers_out.status = http_status;<br>
>   r->headers_out.content_length_n = buf->last - buf->pos;<br>
>   ngx_str_set(&r->headers_out.content_type, "text/plain");<br>
> <br>
>   rc = ngx_http_send_header(r);<br>
> -----------------------------------------------------------------------<br>
> <br>
> However, this causes the "header already sent" error to be raised in the<br>
> error.log. The reason for this is because, ngx_http_core_content_phase<br>
> calls ngx_http_finalize_request after returning from the body filter.<br>
> <br>
> ngx_http_finalize_request calls ngx_http_special_response_handler if the<br>
> body filter returns any codes greater than NGX_HTTP_SPECIAL_RESPONSE. The<br>
> ngx_http_special_response_handler in turn calls<br>
> ngx_http_send_special_response  which again tries to send the response<br>
> header using the stock error message in the ngx_http_error_pages array for<br>
> the return code in question. The alert is raised since we already sent it.<br>
> <br>
> Is there a way to prevent the special_response handler from either sending<br>
> this message again or use the buffer attached to the request in the body<br>
> filter?<br>
<br>
It is not possible to return a response body from a request body <br>
filter, you can only return an error code.<br>
<br>
If you want to return a custom response, consider configuring an <br>
error_page and return an appropriate custom response message from <br>
there.<br>
<br>
-- <br>
Maxim Dounin<br>
<a href="http://mdounin.ru/" rel="noreferrer" target="_blank">http://mdounin.ru/</a><br>
_______________________________________________<br>
nginx-devel mailing list -- <a href="mailto:nginx-devel@nginx.org" target="_blank">nginx-devel@nginx.org</a><br>
To unsubscribe send an email to <a href="mailto:nginx-devel-leave@nginx.org" target="_blank">nginx-devel-leave@nginx.org</a><br>
</blockquote></div>