|
45 | 45 | import org.eclipse.jetty.http2.frames.ResetFrame;
|
46 | 46 | import org.eclipse.jetty.http2.frames.SettingsFrame;
|
47 | 47 | import org.eclipse.jetty.http2.hpack.HpackException;
|
| 48 | +import org.eclipse.jetty.http2.server.AbstractHTTP2ServerConnectionFactory; |
48 | 49 | import org.eclipse.jetty.io.Content;
|
49 | 50 | import org.eclipse.jetty.server.Handler;
|
| 51 | +import org.eclipse.jetty.server.HttpConfiguration; |
50 | 52 | import org.eclipse.jetty.server.Request;
|
51 | 53 | import org.eclipse.jetty.server.Response;
|
52 | 54 | import org.eclipse.jetty.util.BufferUtil;
|
@@ -1051,7 +1053,7 @@ public void onClose(Session session, GoAwayFrame frame, Callback callback)
|
1051 | 1053 | .put("custom", value);
|
1052 | 1054 | MetaData.Request metaData = newRequest("GET", requestFields);
|
1053 | 1055 | HeadersFrame request = new HeadersFrame(metaData, null, true);
|
1054 |
| - session.newStream(request, new FuturePromise<>(), new Stream.Listener(){}); |
| 1056 | + session.newStream(request, new FuturePromise<>(), new Stream.Listener() {}); |
1055 | 1057 |
|
1056 | 1058 | // Test failure and close reason on client.
|
1057 | 1059 | String closeReason = clientCloseReasonFuture.get(5, TimeUnit.SECONDS);
|
@@ -1125,7 +1127,7 @@ public void onClose(Session session, GoAwayFrame frame, Callback callback)
|
1125 | 1127 | Session session = newClientSession(listener);
|
1126 | 1128 | MetaData.Request metaData = newRequest("GET", HttpFields.EMPTY);
|
1127 | 1129 | HeadersFrame request = new HeadersFrame(metaData, null, true);
|
1128 |
| - session.newStream(request, new FuturePromise<>(), new Stream.Listener(){}); |
| 1130 | + session.newStream(request, new FuturePromise<>(), new Stream.Listener() {}); |
1129 | 1131 |
|
1130 | 1132 | // Test failure and close reason on server.
|
1131 | 1133 | String closeReason = serverCloseReasonFuture.get(5, TimeUnit.SECONDS);
|
@@ -1294,6 +1296,48 @@ public Stream.Listener onNewStream(Stream stream, HeadersFrame frame)
|
1294 | 1296 | assertTrue(latch.await(5, TimeUnit.SECONDS));
|
1295 | 1297 | }
|
1296 | 1298 |
|
| 1299 | + @Test |
| 1300 | + public void testLargeRequestHeaders() throws Exception |
| 1301 | + { |
| 1302 | + int maxHeadersSize = 20 * 1024; |
| 1303 | + HttpConfiguration httpConfig = new HttpConfiguration(); |
| 1304 | + httpConfig.setRequestHeaderSize(2 * maxHeadersSize); |
| 1305 | + start(new Handler.Abstract() |
| 1306 | + { |
| 1307 | + @Override |
| 1308 | + public boolean handle(Request request, Response response, Callback callback) |
| 1309 | + { |
| 1310 | + callback.succeeded(); |
| 1311 | + return true; |
| 1312 | + } |
| 1313 | + }, httpConfig); |
| 1314 | + connector.getBean(AbstractHTTP2ServerConnectionFactory.class).setMaxFrameSize(17 * 1024); |
| 1315 | + http2Client.setMaxFrameSize(18 * 1024); |
| 1316 | + |
| 1317 | + Session session = newClientSession(new Session.Listener() {}); |
| 1318 | + |
| 1319 | + CountDownLatch responseLatch = new CountDownLatch(1); |
| 1320 | + HttpFields.Mutable headers = HttpFields.build() |
| 1321 | + // Symbol "<" needs 15 bits to be Huffman encoded, |
| 1322 | + // while letters/numbers take typically less than |
| 1323 | + // 8 bits, and here we want to exceed maxHeadersSize. |
| 1324 | + .put("X-Large", "<".repeat(maxHeadersSize)); |
| 1325 | + MetaData.Request request = newRequest("GET", headers); |
| 1326 | + session.newStream(new HeadersFrame(request, null, true), new Stream.Listener() |
| 1327 | + { |
| 1328 | + @Override |
| 1329 | + public void onHeaders(Stream stream, HeadersFrame frame) |
| 1330 | + { |
| 1331 | + assertTrue(frame.isEndStream()); |
| 1332 | + MetaData.Response response = (MetaData.Response)frame.getMetaData(); |
| 1333 | + assertEquals(HttpStatus.OK_200, response.getStatus()); |
| 1334 | + responseLatch.countDown(); |
| 1335 | + } |
| 1336 | + }).get(5, TimeUnit.SECONDS); |
| 1337 | + |
| 1338 | + assertTrue(responseLatch.await(5, TimeUnit.SECONDS)); |
| 1339 | + } |
| 1340 | + |
1297 | 1341 | private static void sleep(long time)
|
1298 | 1342 | {
|
1299 | 1343 | try
|
|
0 commit comments