416242 respect persistence headers in ProxyHTTPSPDYConnection
This commit is contained in:
parent
9565d2647e
commit
fcdea1d4b4
|
@ -26,6 +26,7 @@ import org.eclipse.jetty.http.HttpField;
|
||||||
import org.eclipse.jetty.http.HttpFields;
|
import org.eclipse.jetty.http.HttpFields;
|
||||||
import org.eclipse.jetty.http.HttpGenerator;
|
import org.eclipse.jetty.http.HttpGenerator;
|
||||||
import org.eclipse.jetty.http.HttpHeader;
|
import org.eclipse.jetty.http.HttpHeader;
|
||||||
|
import org.eclipse.jetty.http.HttpHeaderValue;
|
||||||
import org.eclipse.jetty.http.HttpMethod;
|
import org.eclipse.jetty.http.HttpMethod;
|
||||||
import org.eclipse.jetty.http.HttpParser;
|
import org.eclipse.jetty.http.HttpParser;
|
||||||
import org.eclipse.jetty.http.HttpVersion;
|
import org.eclipse.jetty.http.HttpVersion;
|
||||||
|
@ -143,10 +144,16 @@ public class ProxyHTTPSPDYConnection extends HttpConnection implements HttpParse
|
||||||
{
|
{
|
||||||
stream.getStreamFrameListener().onData(stream, toDataInfo(content, true));
|
stream.getStreamFrameListener().onData(stream, toDataInfo(content, true));
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void completed()
|
||||||
|
{
|
||||||
headers.clear();
|
headers.clear();
|
||||||
stream = null;
|
stream = null;
|
||||||
content = null;
|
content = null;
|
||||||
return false;
|
super.completed();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -235,6 +242,8 @@ public class ProxyHTTPSPDYConnection extends HttpConnection implements HttpParse
|
||||||
{
|
{
|
||||||
Fields headers = new Fields(replyInfo.getHeaders(), false);
|
Fields headers = new Fields(replyInfo.getHeaders(), false);
|
||||||
|
|
||||||
|
addPersistenceHeader(headers);
|
||||||
|
|
||||||
headers.remove(HTTPSPDYHeader.SCHEME.name(version));
|
headers.remove(HTTPSPDYHeader.SCHEME.name(version));
|
||||||
|
|
||||||
String status = headers.remove(HTTPSPDYHeader.STATUS.name(version)).value();
|
String status = headers.remove(HTTPSPDYHeader.STATUS.name(version)).value();
|
||||||
|
@ -314,6 +323,43 @@ public class ProxyHTTPSPDYConnection extends HttpConnection implements HttpParse
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addPersistenceHeader(Fields headersToAddTo)
|
||||||
|
{
|
||||||
|
HttpVersion httpVersion = HttpVersion.fromString(headers.get("version").value());
|
||||||
|
boolean persistent = false;
|
||||||
|
switch (httpVersion)
|
||||||
|
{
|
||||||
|
case HTTP_1_0:
|
||||||
|
{
|
||||||
|
Fields.Field keepAliveHeader = headers.get(HttpHeader.KEEP_ALIVE.asString());
|
||||||
|
if(keepAliveHeader!=null)
|
||||||
|
persistent = HttpHeaderValue.KEEP_ALIVE.asString().equals(keepAliveHeader.value());
|
||||||
|
if (!persistent)
|
||||||
|
persistent = HttpMethod.CONNECT.is(headers.get("method").value());
|
||||||
|
if (persistent)
|
||||||
|
headersToAddTo.add(HttpHeader.CONNECTION.asString(), HttpHeaderValue.KEEP_ALIVE.asString());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HTTP_1_1:
|
||||||
|
{
|
||||||
|
Fields.Field connectionHeader = headers.get(HttpHeader.CONNECTION.asString());
|
||||||
|
if(connectionHeader != null)
|
||||||
|
persistent = !HttpHeaderValue.CLOSE.asString().equals(connectionHeader.value());
|
||||||
|
else
|
||||||
|
persistent = true;
|
||||||
|
if (!persistent)
|
||||||
|
persistent = HttpMethod.CONNECT.is(headers.get("method").value());
|
||||||
|
if (!persistent)
|
||||||
|
headersToAddTo.add(HttpHeader.CONNECTION.asString(), HttpHeaderValue.CLOSE.asString());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private class HTTPPushStream extends StandardStream
|
private class HTTPPushStream extends StandardStream
|
||||||
{
|
{
|
||||||
private HTTPPushStream(int id, byte priority, ISession session, IStream associatedStream)
|
private HTTPPushStream(int id, byte priority, ISession session, IStream associatedStream)
|
||||||
|
|
Loading…
Reference in New Issue