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)

Reply via email to