public class HttpParser extends Object
This parser parses HTTP client and server messages from buffers
passed in the parseNext(ByteBuffer)
method. The parsed
elements of the HTTP message are passed as event calls to the
HttpParser.HttpHandler
instance the parser is constructed with.
If the passed handler is a HttpParser.RequestHandler
then server side
parsing is performed and if it is a HttpParser.ResponseHandler
, then
client side parsing is done.
The contract of the HttpParser.HttpHandler
API is that if a call returns
true then the call to 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 parseNext(ByteBuffer)
rather than from within the scope of a call like
HttpParser.HttpHandler.messageComplete()
For performance, the parse is heavily dependent on the
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 HttpHeader.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 HttpFields
from previous parsed messages
is used to help the parsing of subsequent messages.
The parser can work in varying compliance modes:
Modifier and Type | Class and Description |
---|---|
static interface |
HttpParser.ComplianceHandler |
static class |
HttpParser.FieldState |
static interface |
HttpParser.HttpHandler |
static interface |
HttpParser.RequestHandler |
static interface |
HttpParser.ResponseHandler |
static class |
HttpParser.State |
Modifier and Type | Field and Description |
---|---|
static String |
__STRICT
Deprecated.
|
static Trie<HttpField> |
CACHE
Cache of common
HttpField s including:
Common static combinations such as:
Connection: close
Accept-Encoding: gzip
Content-Length: 0
Combinations of Content-Type header for common mime types by common charsets
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
|
static int |
INITIAL_URI_LENGTH |
static Logger |
LOG |
Constructor and Description |
---|
HttpParser(HttpParser.RequestHandler handler) |
HttpParser(HttpParser.RequestHandler handler,
HttpCompliance compliance) |
HttpParser(HttpParser.RequestHandler handler,
int maxHeaderBytes) |
HttpParser(HttpParser.RequestHandler handler,
int maxHeaderBytes,
boolean strict)
Deprecated.
|
HttpParser(HttpParser.RequestHandler handler,
int maxHeaderBytes,
HttpCompliance compliance) |
HttpParser(HttpParser.ResponseHandler handler) |
HttpParser(HttpParser.ResponseHandler handler,
int maxHeaderBytes) |
HttpParser(HttpParser.ResponseHandler handler,
int maxHeaderBytes,
boolean strict)
Deprecated.
|
HttpParser(HttpParser.ResponseHandler handler,
int maxHeaderBytes,
HttpCompliance compliance) |
Modifier and Type | Method and Description |
---|---|
void |
atEOF()
Signal that the associated data source is at EOF
|
void |
close()
Request that the associated data source be closed
|
long |
getContentLength() |
long |
getContentRead() |
Trie<HttpField> |
getFieldCache() |
HttpParser.HttpHandler |
getHandler() |
HttpParser.State |
getState() |
boolean |
inContentState() |
boolean |
inHeaderState() |
boolean |
isAtEOF() |
boolean |
isChunking() |
boolean |
isClose() |
boolean |
isClosed() |
boolean |
isComplete() |
boolean |
isIdle() |
boolean |
isStart() |
boolean |
isState(HttpParser.State state) |
boolean |
parseNext(ByteBuffer buffer)
Parse until next Event.
|
void |
reset() |
void |
setHeadResponse(boolean head)
Set if a HEAD response is expected
|
String |
toString() |
public static final Logger LOG
@Deprecated public static final String __STRICT
public static final int INITIAL_URI_LENGTH
public static final Trie<HttpField> CACHE
HttpField
s including: public HttpParser(HttpParser.RequestHandler handler)
public HttpParser(HttpParser.ResponseHandler handler)
public HttpParser(HttpParser.RequestHandler handler, int maxHeaderBytes)
public HttpParser(HttpParser.ResponseHandler handler, int maxHeaderBytes)
@Deprecated public HttpParser(HttpParser.RequestHandler handler, int maxHeaderBytes, boolean strict)
@Deprecated public HttpParser(HttpParser.ResponseHandler handler, int maxHeaderBytes, boolean strict)
public HttpParser(HttpParser.RequestHandler handler, HttpCompliance compliance)
public HttpParser(HttpParser.RequestHandler handler, int maxHeaderBytes, HttpCompliance compliance)
public HttpParser(HttpParser.ResponseHandler handler, int maxHeaderBytes, HttpCompliance compliance)
public HttpParser.HttpHandler getHandler()
public long getContentLength()
public long getContentRead()
public void setHeadResponse(boolean head)
head
- true if head response is expectedpublic HttpParser.State getState()
public boolean inContentState()
public boolean inHeaderState()
public boolean isChunking()
public boolean isStart()
public boolean isClose()
public boolean isClosed()
public boolean isIdle()
public boolean isComplete()
public boolean isState(HttpParser.State state)
public boolean parseNext(ByteBuffer buffer)
buffer
- the buffer to parseHttpParser.RequestHandler
method was called and it returned true;public boolean isAtEOF()
public void atEOF()
public void close()
public void reset()
Copyright © 2010 - 2020 Adobe. All Rights Reserved