You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2024/08/15 13:39:15 UTC
(tomcat) branch main updated: Complete the early hints implementation by updating the Servlet API
This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/main by this push:
new 776f350e87 Complete the early hints implementation by updating the Servlet API
776f350e87 is described below
commit 776f350e87280e9dbfe9aa559ecb81a7d5afde77
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Thu Aug 15 14:39:09 2024 +0100
Complete the early hints implementation by updating the Servlet API
---
java/jakarta/servlet/http/HttpServletResponse.java | 19 +++++++++++++++++++
.../servlet/http/HttpServletResponseWrapper.java | 11 +++++++++++
java/org/apache/catalina/connector/Response.java | 1 +
.../org/apache/catalina/connector/ResponseFacade.java | 1 +
.../catalina/filters/TesterHttpServletResponse.java | 5 +++++
webapps/docs/changelog.xml | 8 ++++++++
6 files changed, 45 insertions(+)
diff --git a/java/jakarta/servlet/http/HttpServletResponse.java b/java/jakarta/servlet/http/HttpServletResponse.java
index 49be83c10a..85c79c1a8f 100644
--- a/java/jakarta/servlet/http/HttpServletResponse.java
+++ b/java/jakarta/servlet/http/HttpServletResponse.java
@@ -212,6 +212,17 @@ public interface HttpServletResponse extends ServletResponse {
*/
void sendRedirect(String location, int sc, boolean clearBuffer) throws IOException;
+ /**
+ * Sends a 103 response to the client using the current response headers. This method does not commit the response and
+ * may be called multiple times before the response is committed. The current response headers may include some headers
+ * that have been added automatcially by the container.
+ * <p>
+ * This method has no effect if called after the response has been committed.
+ *
+ * @since Servlet 6.2
+ */
+ void sendEarlyHints();
+
/**
* Sets a response header with the given name and date-value. The date is specified in terms of milliseconds since
* the epoch. If the header had already been set, the new value overwrites the previous one. The
@@ -386,6 +397,14 @@ public interface HttpServletResponse extends ServletResponse {
*/
int SC_SWITCHING_PROTOCOLS = 101;
+ /**
+ * Status code (103) indicating that the server is likely to send a final response containing the headers present in
+ * this informational response.
+ *
+ * @since Servlet 6.2
+ */
+ int SC_EARLY_HINTS = 103;
+
/**
* Status code (200) indicating the request succeeded normally.
*/
diff --git a/java/jakarta/servlet/http/HttpServletResponseWrapper.java b/java/jakarta/servlet/http/HttpServletResponseWrapper.java
index 665ee96e50..3fbfd8c04e 100644
--- a/java/jakarta/servlet/http/HttpServletResponseWrapper.java
+++ b/java/jakarta/servlet/http/HttpServletResponseWrapper.java
@@ -139,6 +139,17 @@ public class HttpServletResponseWrapper extends ServletResponseWrapper implement
}
+ /**
+ * The default behavior of this method is to call sendEarlyHints() on the wrapped response object.
+ *
+ * @since Servlet 6.2
+ */
+ @Override
+ public void sendEarlyHints() {
+ this._getHttpServletResponse().sendEarlyHints();
+ }
+
+
/**
* The default behavior of this method is to call setDateHeader(String name, long date) on the wrapped response
* object.
diff --git a/java/org/apache/catalina/connector/Response.java b/java/org/apache/catalina/connector/Response.java
index 66dd7cab47..3a3b4237d3 100644
--- a/java/org/apache/catalina/connector/Response.java
+++ b/java/org/apache/catalina/connector/Response.java
@@ -1037,6 +1037,7 @@ public class Response implements HttpServletResponse {
}
+ @Override
public void sendEarlyHints() {
if (isCommitted()) {
return;
diff --git a/java/org/apache/catalina/connector/ResponseFacade.java b/java/org/apache/catalina/connector/ResponseFacade.java
index dcc4ee059d..6c12853f1f 100644
--- a/java/org/apache/catalina/connector/ResponseFacade.java
+++ b/java/org/apache/catalina/connector/ResponseFacade.java
@@ -245,6 +245,7 @@ public class ResponseFacade implements HttpServletResponse {
}
+ @Override
public void sendEarlyHints() {
response.sendEarlyHints();
}
diff --git a/test/org/apache/catalina/filters/TesterHttpServletResponse.java b/test/org/apache/catalina/filters/TesterHttpServletResponse.java
index 38e8e53617..3b284d1a7b 100644
--- a/test/org/apache/catalina/filters/TesterHttpServletResponse.java
+++ b/test/org/apache/catalina/filters/TesterHttpServletResponse.java
@@ -353,6 +353,11 @@ public class TesterHttpServletResponse implements HttpServletResponse {
public void sendRedirect(String location, int sc, boolean clearBuffer) throws IOException {
/* NOOP */}
+ @Override
+ public void sendEarlyHints() {
+ /* NOOP */
+ }
+
@Override
public void setDateHeader(String name, long value) {
/* NOOP */}
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index bcd5a4398b..18b4733a82 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -113,6 +113,14 @@
</scode>
</changelog>
</subsection>
+ <subsection name="Catalina">
+ <changelog>
+ <add>
+ Add support for the new Servlet API method
+ <code>HttpServletResponse.sendEarlyHints()</code>. (markt)
+ </add>
+ </changelog>
+ </subsection>
<subsection name="Coyote">
<changelog>
<fix>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org