Skip to content

Commit

Permalink
Merge pull request #5225 from eclipse/jetty-9.4.x-5103_proxy_wrong_ht…
Browse files Browse the repository at this point in the history
…tp_version

Fixes #5103 - Proxy sets protocol version to 2.0 instead of 1.1 when …
  • Loading branch information
sbordet committed Sep 2, 2020
2 parents e2d0e1f + 1e90d13 commit e940e5c
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 16 deletions.
Expand Up @@ -24,15 +24,14 @@
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.client.api.Request;
import org.eclipse.jetty.http.HostPortHttpField;
import org.eclipse.jetty.http.HttpFields;
import org.eclipse.jetty.http.HttpScheme;
import org.eclipse.jetty.http.HttpStatus;
import org.eclipse.jetty.http.HttpVersion;
import org.eclipse.jetty.http.MetaData;
import org.eclipse.jetty.http2.api.Session;
Expand All @@ -53,6 +52,7 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class ProxyTest
Expand Down Expand Up @@ -137,33 +137,60 @@ public void dispose() throws Exception
}

@Test
public void testServerBigDownloadSlowClient() throws Exception
public void testHTTPVersion() throws Exception
{
final CountDownLatch serverLatch = new CountDownLatch(1);
final byte[] content = new byte[1024 * 1024];
startServer(new HttpServlet()
{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
protected void service(HttpServletRequest request, HttpServletResponse response)
{
response.getOutputStream().write(content);
serverLatch.countDown();
assertEquals(HttpVersion.HTTP_1_1.asString(), request.getProtocol());
}
});
Map<String, String> params = new HashMap<>();
params.put("proxyTo", "http://localhost:" + serverConnector.getLocalPort());
startProxy(new AsyncProxyServlet.Transparent()
startProxy(new AsyncProxyServlet.Transparent(), params);
startClient();

CountDownLatch clientLatch = new CountDownLatch(1);
Session session = newClient(new Session.Listener.Adapter());
MetaData.Request metaData = newRequest("GET", "/", new HttpFields());
HeadersFrame frame = new HeadersFrame(metaData, null, true);
session.newStream(frame, new Promise.Adapter<>(), new Stream.Listener.Adapter()
{
@Override
public void onHeaders(Stream stream, HeadersFrame frame)
{
assertTrue(frame.isEndStream());
MetaData.Response response = (MetaData.Response)frame.getMetaData();
assertEquals(HttpStatus.OK_200, response.getStatus());
clientLatch.countDown();
}
});

assertTrue(clientLatch.await(5, TimeUnit.SECONDS));
}

@Test
public void testServerBigDownloadSlowClient() throws Exception
{
CountDownLatch serverLatch = new CountDownLatch(1);
byte[] content = new byte[1024 * 1024];
startServer(new HttpServlet()
{
@Override
protected void sendProxyRequest(HttpServletRequest clientRequest, HttpServletResponse proxyResponse, Request proxyRequest)
protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException
{
proxyRequest.version(HttpVersion.HTTP_1_1);
super.sendProxyRequest(clientRequest, proxyResponse, proxyRequest);
response.getOutputStream().write(content);
serverLatch.countDown();
}
}, params);
});
Map<String, String> params = new HashMap<>();
params.put("proxyTo", "http://localhost:" + serverConnector.getLocalPort());
startProxy(new AsyncProxyServlet.Transparent(), params);
startClient();

final CountDownLatch clientLatch = new CountDownLatch(1);
CountDownLatch clientLatch = new CountDownLatch(1);
Session session = newClient(new Session.Listener.Adapter());
MetaData.Request metaData = newRequest("GET", "/", new HttpFields());
HeadersFrame frame = new HeadersFrame(metaData, null, true);
Expand Down
Expand Up @@ -50,7 +50,6 @@
import org.eclipse.jetty.http.HttpHeader;
import org.eclipse.jetty.http.HttpHeaderValue;
import org.eclipse.jetty.http.HttpStatus;
import org.eclipse.jetty.http.HttpVersion;
import org.eclipse.jetty.util.HttpCookieStore;
import org.eclipse.jetty.util.ProcessorUtils;
import org.eclipse.jetty.util.StringUtil;
Expand Down Expand Up @@ -457,9 +456,10 @@ protected boolean expects100Continue(HttpServletRequest request)

protected Request newProxyRequest(HttpServletRequest request, String rewrittenTarget)
{
// Do not copy the HTTP version, since the client-to-proxy
// version may be different from the proxy-to-server version.
return getHttpClient().newRequest(rewrittenTarget)
.method(request.getMethod())
.version(HttpVersion.fromString(request.getProtocol()))
.attribute(CLIENT_REQUEST_ATTRIBUTE, request);
}

Expand Down

0 comments on commit e940e5c

Please sign in to comment.