diff options
author | Greg Wilkins | 2014-11-20 04:33:22 +0000 |
---|---|---|
committer | Greg Wilkins | 2014-11-20 04:33:22 +0000 |
commit | 1915e592b587dd13e2c2083c4702ad77bba9f0e1 (patch) | |
tree | c8a6988061dd9e5875b3fed1fb61c4e00dc06cef /jetty-server | |
parent | 46a5ef861d90f6ce4ceeed83adc8d26814855891 (diff) | |
download | org.eclipse.jetty.project-1915e592b587dd13e2c2083c4702ad77bba9f0e1.tar.gz org.eclipse.jetty.project-1915e592b587dd13e2c2083c4702ad77bba9f0e1.tar.xz org.eclipse.jetty.project-1915e592b587dd13e2c2083c4702ad77bba9f0e1.zip |
452424 Do not add Date header if already set
Diffstat (limited to 'jetty-server')
3 files changed, 37 insertions, 4 deletions
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannel.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannel.java index 9499cf7f19..5d563264cf 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannel.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannel.java @@ -656,19 +656,20 @@ public class HttpChannel<T> implements HttpParser.RequestHandler<T>, Runnable, H public boolean headerComplete() { _requests.incrementAndGet(); + HttpFields fields = _response.getHttpFields(); switch (_version) { case HTTP_0_9: break; case HTTP_1_0: - if (_configuration.getSendDateHeader()) - _response.getHttpFields().put(_connector.getServer().getDateField()); + if (_configuration.getSendDateHeader() && !fields.contains(HttpHeader.DATE)) + _response.getHttpFields().add(_connector.getServer().getDateField()); break; case HTTP_1_1: - if (_configuration.getSendDateHeader()) - _response.getHttpFields().put(_connector.getServer().getDateField()); + if (_configuration.getSendDateHeader() && !fields.contains(HttpHeader.DATE)) + _response.getHttpFields().add(_connector.getServer().getDateField()); if (_expect) { diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/DumpHandler.java b/jetty-server/src/test/java/org/eclipse/jetty/server/DumpHandler.java index 36e91052fd..3ac0f35ccd 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/DumpHandler.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/DumpHandler.java @@ -81,6 +81,9 @@ public class DumpHandler extends AbstractHandler read.append((char)in.read()); } + if (request.getParameter("date")!=null) + response.setHeader("Date",request.getParameter("date")); + if (request.getParameter("ISE")!=null) { throw new IllegalStateException("Testing ISE"); diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java index dceed4900d..ce2cac2cad 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java @@ -73,6 +73,7 @@ public class HttpConnectionTest connector = new LocalConnector(server,http,null); connector.setIdleTimeout(5000); + connector.getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration().setSendDateHeader(true); server.addConnector(connector); server.setHandler(new DumpHandler()); ErrorHandler eh=new ErrorHandler(); @@ -147,6 +148,34 @@ public class HttpConnectionTest } @Test + public void testDate() throws Exception + { + String response=connector.getResponses("GET / HTTP/1.1\n"+ + "Host: localhost:80\n"+ + "Connection: close\n"+ + "\n"); + + int offset=0; + offset = checkContains(response,offset,"HTTP/1.1 200"); + offset = checkContains(response,offset,"Date: "); + checkContains(response,offset,"pathInfo=/"); + } + + @Test + public void testSetDate() throws Exception + { + String response=connector.getResponses("GET /?date=1+Jan+1970 HTTP/1.1\n"+ + "Host: localhost:80\n"+ + "Connection: close\n"+ + "\n"); + + int offset=0; + offset = checkContains(response,offset,"HTTP/1.1 200"); + offset = checkContains(response,offset,"Date: 1 Jan 1970"); + checkContains(response,offset,"pathInfo=/"); + } + + @Test public void testBadNoPath() throws Exception { String response=connector.getResponses("GET http://localhost:80/../cheat HTTP/1.1\n"+ |