Radu Cotescu created SLING-12003:
------------------------------------
Summary: The RequestDispatcher should flush the buffer on forward
only if the buffer hasn't already been closed
Key: SLING-12003
URL: https://issues.apache.org/jira/browse/SLING-12003
Project: Sling
Issue Type: Improvement
Components: Engine
Affects Versions: Engine 2.2.10
Reporter: Radu Cotescu
Fix For: Engine 2.15.6
The {{SlingRequestDispatcher#forward}} call [0] attempts to close the response
buffer even if this has already been closed by the servlet to which the request
was originally forwarded. The Servlet Specification [1] mentions the following
in section 9.4:
{quote}Before the forward method of the RequestDispatcher interface returns
without exception, the response content must be sent and committed, and closed
by the servlet container, unless the request was put into the asynchronous mode.
{quote}
As such, the {{RequestDispatcher#forward}} implementation should indeed make
sure the response is committed, but it's not necessarily the only one that must
commit the response. Jetty seems to have the same understanding [2], where the
close is performed only if the response hasn't already been committed and the
request is not async.
[0] -
[https://github.com/apache/sling-org-apache-sling-engine/blob/368690a2a81fd8a121e62767fcd32b63936a65b8/src/main/java/org/apache/sling/engine/impl/request/SlingRequestDispatcher.java#L125-L128]
[1] -
[https://download.oracle.com/otn-pub/jcp/servlet-3_1-fr-spec/servlet-3_1-final.pdf]
[2] -
[https://github.com/eclipse/jetty.project/blob/jetty-11.0.x/jetty-server/src/main/java/org/eclipse/jetty/server/Dispatcher.java#L218]
--
This message was sent by Atlassian Jira
(v8.20.10#820010)