diff options
author | Greg Wilkins | 2013-06-21 01:22:58 +0000 |
---|---|---|
committer | Greg Wilkins | 2013-06-21 01:22:58 +0000 |
commit | 3ded04813d5f4300bc9bff98573725530f942042 (patch) | |
tree | c7508b7ec812d55dcc475261202a59ba527672f3 /jetty-http | |
parent | 31082e1f8e76ba8f5dcc5349e46eed5af26259c4 (diff) | |
parent | 60828fe8a39cfd7578a29db073e9dfb594cb5045 (diff) | |
download | org.eclipse.jetty.project-3ded04813d5f4300bc9bff98573725530f942042.tar.gz org.eclipse.jetty.project-3ded04813d5f4300bc9bff98573725530f942042.tar.xz org.eclipse.jetty.project-3ded04813d5f4300bc9bff98573725530f942042.zip |
Merge remote-tracking branch 'origin/master' into servlet-3.1-api
Conflicts:
jetty-spdy/spdy-http-server/src/test/java/org/eclipse/jetty/spdy/server/http/ServerHTTPSPDYTest.java
Diffstat (limited to 'jetty-http')
-rw-r--r-- | jetty-http/src/main/java/org/eclipse/jetty/http/HttpField.java | 12 | ||||
-rw-r--r-- | jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java | 35 |
2 files changed, 47 insertions, 0 deletions
diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpField.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpField.java index c127e7504b..aedfd2aec2 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpField.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpField.java @@ -33,6 +33,18 @@ import org.eclipse.jetty.util.Trie; */ public class HttpField { + /** + * Cache of common {@link HttpField}s including: <UL> + * <LI>Common static combinations such as:<UL> + * <li>Connection: close + * <li>Accept-Encoding: gzip + * <li>Content-Length: 0 + * </ul> + * <li>Combinations of Content-Type header for common mime types by common charsets + * <li>Most common headers with null values so that a lookup will at least + * determine the header name even if the name:value combination is not cached + * </ul> + */ public final static Trie<HttpField> CACHE = new ArrayTrie<>(2048); public final static Trie<HttpField> CONTENT_TYPE = new ArrayTrie<>(512); diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java index 7d183885d7..b0e7909da0 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java @@ -29,6 +29,41 @@ import org.eclipse.jetty.util.TypeUtil; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; + +/* ------------------------------------------------------------ */ +/** A Parser for HTTP 0.9, 1.0 and 1.1 + * <p> + * The is parser parses HTTP client and server messages from buffers + * passed in the {@link #parseNext(ByteBuffer)} method. The parsed + * elements of the HTTP message are passed as event calls to the + * {@link HttpHandler} instance the parser is constructed with. + * If the passed handler is a {@link RequestHandler} then server side + * parsing is performed and if it is a {@link ResponseHandler}, then + * client side parsing is done. + * </p> + * <p> + * The contract of the {@link HttpHandler} API is that if a call returns + * true then the call to {@link #parseNext(ByteBuffer)} will return as + * soon as possible also with a true response. Typically this indicates + * that the parsing has reached a stage where the caller should process + * the events accumulated by the handler. It is the preferred calling + * style that handling such as calling a servlet to process a request, + * should be done after a true return from {@link #parseNext(ByteBuffer)} + * rather than from within the scope of a call like + * {@link RequestHandler#messageComplete()} + * </p> + * <p> + * For performance, the parse is heavily dependent on the + * {@link Trie#getBest(ByteBuffer, int, int)} method to look ahead in a + * single pass for both the structure ( : and CRLF ) and semantic (which + * header and value) of a header. Specifically the static {@link HttpField#CACHE} + * is used to lookup common combinations of headers and values + * (eg. "Connection: close"), or just header names (eg. "Connection:" ). + * For headers who's value is not known statically (eg. Host, COOKIE) then a + * per parser dynamic Trie of {@link HttpFields} from previous parsed messages + * is used to help the parsing of subsequent messages. + * </p> + */ public class HttpParser { public static final Logger LOG = Log.getLogger(HttpParser.class); |