http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/IfNoneMatch.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/http/IfNoneMatch.java 
b/juneau-core/src/main/java/org/apache/juneau/http/IfNoneMatch.java
new file mode 100644
index 0000000..f587f07
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/IfNoneMatch.java
@@ -0,0 +1,95 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+/**
+ * Represents a parsed <l>If-None-Match</l> HTTP request header.
+ * <p>
+ * Allows a 304 Not Modified to be returned if content is unchanged.
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     If-None-Match: "737060cd8c284d8af7ad3082f209582d"
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ *
+ * The If-None-Match request-header field is used with a method to make it 
conditional.
+ * A client that has one or more entities previously obtained from the 
resource can verify that none of those entities
+ * is current by including a list of their associated entity tags in the 
If-None-Match header field.
+ * The purpose of this feature is to allow efficient updates of cached 
information with a minimum amount of transaction
+ * overhead.
+ * It is also used to prevent a method (e.g. PUT) from inadvertently modifying 
an existing resource when the client
+ * believes that the resource does not exist.
+ * <p>
+ * As a special case, the value "*" matches any current entity of the resource.
+ * <p class='bcode'>
+ *     If-None-Match = "If-None-Match" ":" ( "*" | 1#entity-tag )
+ * </p>
+ * <p>
+ * If any of the entity tags match the entity tag of the entity that would 
have been returned in the response to a
+ * similar GET request (without the If-None-Match header) on that resource, or 
if "*" is given
+ * and any current entity exists for that resource, then the server MUST NOT 
perform the requested method, unless
+ * required to do so because the resource's modification date fails to match 
that supplied in an If-Modified-Since
+ * header field in the request.
+ * Instead, if the request method was GET or HEAD, the server SHOULD respond 
with a 304 (Not Modified) response,
+ * including the cache- related header fields (particularly ETag) of one of 
the entities that matched.
+ * For all other request methods, the server MUST respond with a status of 412 
(Precondition Failed).
+ * <p>
+ * See section 13.3.3 for rules on how to determine if two entities tags match.
+ * The weak comparison function can only be used with GET or HEAD requests.
+ * <p>
+ * If none of the entity tags match, then the server MAY perform the requested 
method as if the If-None-Match header
+ * field did not exist, but MUST also ignore any If-Modified-Since header 
field(s) in the request.
+ * That is, if no entity tags match, then the server MUST NOT return a 304 
(Not Modified) response.
+ * <p>
+ * If the request would, without the If-None-Match header field, result in 
anything other than a 2xx or 304 status,
+ * then the If-None-Match header MUST be ignored.
+ * (See section 13.3.4 for a discussion of server behavior when both 
If-Modified-Since and If-None-Match appear in the
+ * same request.)
+ * <p>
+ * The meaning of "If-None-Match: *" is that the method MUST NOT be performed 
if the representation selected by the
+ * origin server (or by a cache, possibly using the Vary mechanism, see 
section 14.44) exists, and SHOULD be performed
+ * if the representation does not exist.
+ * This feature is intended to be useful in preventing races between PUT 
operations.
+ * <p>
+ * Examples:
+ * <p class='bcode'>
+ *     If-None-Match: "xyzzy"
+ *     If-None-Match: W/"xyzzy"
+ *     If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
+ *     If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz"
+ *     If-None-Match: *
+ * </p>
+ * <p>
+ * The result of a request having both an If-None-Match header field and 
either an If-Match or an If-Unmodified-Since
+ * header fields is undefined by this specification.
+ */
+public final class IfNoneMatch extends HeaderEntityValidatorArray {
+
+       /**
+        * Returns a parsed <code>If-None-Match</code> header.
+        *
+        * @param value The <code>If-None-Match</code> header string.
+        * @return The parsed <code>If-None-Match</code> header, or 
<jk>null</jk> if the string was null.
+        */
+       public static IfNoneMatch forString(String value) {
+               if (value == null)
+                       return null;
+               return new IfNoneMatch(value);
+       }
+
+       private IfNoneMatch(String value) {
+               super(value);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/IfRange.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/http/IfRange.java 
b/juneau-core/src/main/java/org/apache/juneau/http/IfRange.java
new file mode 100644
index 0000000..cf2cb2b
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/IfRange.java
@@ -0,0 +1,95 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+import static org.apache.juneau.internal.StringUtils.*;
+
+import org.apache.juneau.internal.*;
+
+/**
+ * Represents a parsed <l>If-Range</l> HTTP request header.
+ * <p>
+ * If the entity is unchanged, send me the part(s) that I am missing; 
otherwise, send me the entire new entity.
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     If-Range: "737060cd8c284d8af7ad3082f209582d"
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ *
+ * If a client has a partial copy of an entity in its cache, and wishes to 
have an up-to-date copy of the entire entity
+ * in its cache, it could use the Range request-header with a conditional GET 
(using either or both of
+ * If-Unmodified-Since and If-Match.)
+ * However, if the condition fails because the entity has been modified, the 
client would then have to make a second
+ * request to obtain the entire current entity-body.
+ * <p>
+ * The If-Range header allows a client to "short-circuit" the second request.
+ * Informally, its meaning is `if the entity is unchanged, send me the part(s) 
that I am missing; otherwise, send me
+ * the entire new entity'.
+ * <p class='bcode'>
+ *     If-Range = "If-Range" ":" ( entity-tag | HTTP-date )
+ * </p>
+ * <p>
+ * If the client has no entity tag for an entity, but does have a Last- 
Modified date, it MAY use that date in an
+ * If-Range header.
+ * (The server can distinguish between a valid HTTP-date and any form of 
entity-tag by examining no more than two
+ * characters.)
+ * The If-Range header SHOULD only be used together with a Range header, and 
MUST be ignored if the request does not
+ * include a Range header, or if the server does not support the sub-range 
operation.
+ * <p>
+ * If the entity tag given in the If-Range header matches the current entity 
tag for the entity, then the server SHOULD
+ * provide the specified sub-range of the entity using a 206 (Partial content) 
response.
+ * If the entity tag does not match, then the server SHOULD return the entire 
entity using a 200 (OK) response.
+ */
+public final class IfRange extends HeaderString {
+
+       /**
+        * Returns a parsed <code>If-Range</code> header.
+        *
+        * @param value The <code>If-Range</code> header string.
+        * @return The parsed <code>If-Range</code> header, or <jk>null</jk> if 
the string was null.
+        */
+       public static IfRange forString(String value) {
+               if (value == null)
+                       return null;
+               return new IfRange(value);
+       }
+
+       private IfRange(String value) {
+               super(value);
+       }
+
+       /**
+        * Returns this header value as a {@link java.util.Date} object.
+        * @return This header value as a {@link java.util.Date} object, or 
<jk>null</jk> if the value is not a date.
+        */
+       public java.util.Date asDate() {
+               char c0 = charAt(value, 0), c1 = charAt(value, 1);
+               if (c0 == '*' || c0 == '"' || (c0 == 'W' && c1 == '/'))
+                       return null;
+               return DateUtils.parseDate(toString());
+       }
+
+       /**
+        * Returns this header value as an {@link EntityValidator} object.
+        * @return This header value as a {@link EntityValidator} object, or 
<jk>null</jk> if the value is not an entity
+        *      validator.
+        */
+       public EntityValidator asValidator() {
+               char c0 = charAt(value, 0), c1 = charAt(value, 1);
+               if (c0 == '*' || c0 == '"' || (c0 == 'W' && c1 == '/'))
+                       return new EntityValidator(value);
+               return null;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/IfUnmodifiedSince.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/http/IfUnmodifiedSince.java 
b/juneau-core/src/main/java/org/apache/juneau/http/IfUnmodifiedSince.java
new file mode 100644
index 0000000..a86a823
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/IfUnmodifiedSince.java
@@ -0,0 +1,66 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+/**
+ * Represents a parsed <l>If-Unmodified-Since</l> HTTP request header.
+ * <p>
+ * Only send the response if the entity has not been modified since a specific 
time.
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ * The If-Unmodified-Since request-header field is used with a method to make 
it conditional.
+ * If the requested resource has not been modified since the time specified in 
this field, the server SHOULD perform the
+ * requested operation as if the If-Unmodified-Since header were not present.
+ * <p>
+ * If the requested variant has been modified since the specified time, the 
server MUST NOT perform the requested
+ * operation, and MUST return a 412 (Precondition Failed).
+ * <p class='bcode'>
+ *     If-Unmodified-Since = "If-Unmodified-Since" ":" HTTP-date
+ * </p>
+ * <p>
+ * An example of the field is:
+ * <p class='bcode'>
+ *     If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT
+ * </p>
+ * <p>
+ * If the request normally (i.e., without the If-Unmodified-Since header) 
would result in anything other than a 2xx or
+ * 412 status, the If-Unmodified-Since header SHOULD be ignored.
+ * <p>
+ * If the specified date is invalid, the header is ignored.
+ * <p>
+ * The result of a request having both an If-Unmodified-Since header field and 
either an If-None-Match or an
+ * If-Modified-Since header fields is undefined by this specification.
+ */
+public final class IfUnmodifiedSince extends HeaderDate {
+
+       /**
+        * Returns a parsed <code>If-Unmodified-Since</code> header.
+        *
+        * @param value The <code>If-Unmodified-Since</code> header string.
+        * @return The parsed <code>If-Unmodified-Since</code> header, or 
<jk>null</jk> if the string was null.
+        */
+       public static IfUnmodifiedSince forString(String value) {
+               if (value == null)
+                       return null;
+               return new IfUnmodifiedSince(value);
+       }
+
+       private IfUnmodifiedSince(String value) {
+               super(value);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/LastModified.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/http/LastModified.java 
b/juneau-core/src/main/java/org/apache/juneau/http/LastModified.java
new file mode 100644
index 0000000..bd49cbf
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/LastModified.java
@@ -0,0 +1,74 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+/**
+ * Represents a parsed <l>Last-Modified</l> HTTP response header.
+ * <p>
+ * The last modified date for the requested object (in "HTTP-date" format as 
defined by RFC 7231).
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ *
+ * The Last-Modified entity-header field indicates the date and time at which 
the origin server believes the variant was
+ * last modified.
+ * <p class='bcode'>
+ *     Last-Modified  = "Last-Modified" ":" HTTP-date
+ * </p>
+ * <p>
+ * An example of its use is...
+ * <p class='bcode'>
+ *     Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
+ * </p>
+ * <p>
+ * The exact meaning of this header field depends on the implementation of the 
origin server and the nature of the
+ * original resource.
+ * For files, it may be just the file system last-modified time.
+ * For entities with dynamically included parts, it may be the most recent of 
the set of last-modify times for its
+ * component parts.
+ * For database gateways, it may be the last-update time stamp of the record.
+ * For virtual objects, it may be the last time the internal state changed.
+ * <p>
+ * An origin server MUST NOT send a Last-Modified date which is later than the 
server's time of message origination.
+ * In such cases, where the resource's last modification would indicate some 
time in the future, the server MUST replace
+ * that date with the message origination date.
+ * <p>
+ * An origin server SHOULD obtain the Last-Modified value of the entity as 
close as possible to the time that it
+ * generates the Date value of its response.
+ * This allows a recipient to make an accurate assessment of the entity's 
modification time, especially if the entity
+ * changes near the time that the response is generated.
+ * <p>
+ * HTTP/1.1 servers SHOULD send Last-Modified whenever feasible.
+ */
+public final class LastModified extends HeaderDate {
+
+       /**
+        * Returns a parsed <code>Last-Modified</code> header.
+        *
+        * @param value The <code>Last-Modified</code> header string.
+        * @return The parsed <code>Last-Modified</code> header, or 
<jk>null</jk> if the string was null.
+        */
+       public static LastModified forString(String value) {
+               if (value == null)
+                       return null;
+               return new LastModified(value);
+       }
+
+       private LastModified(String value) {
+               super(value);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/Location.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/http/Location.java 
b/juneau-core/src/main/java/org/apache/juneau/http/Location.java
new file mode 100644
index 0000000..017ba77
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/Location.java
@@ -0,0 +1,63 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+/**
+ * Represents a parsed <l>Location</l> HTTP response header.
+ * <p>
+ * Used in redirection, or when a new resource has been created.
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     Location: http://www.w3.org/pub/WWW/People.html
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ *
+ * The Location response-header field is used to redirect the recipient to a 
location other than the Request-URI for
+ * completion of the request or identification of a new resource.
+ * For 201 (Created) responses, the Location is that of the new resource which 
was created by the request.
+ * For 3xx responses, the location SHOULD indicate the server's preferred URI 
for automatic redirection to the resource.
+ * The field value consists of a single absolute URI.
+ * <p class='bcode'>
+ *     Location       = "Location" ":" absoluteURI
+ * </p>
+ * <p>
+ * An example is:
+ * <p class='bcode'>
+ *     Location: http://www.w3.org/pub/WWW/People.html
+ * </p>
+ * <p>
+ * Note: The Content-Location header field (section 14.14) differs from 
Location in that the Content-Location identifies
+ * the original location of the entity enclosed in the request.
+ * It is therefore possible for a response to contain header fields for both 
Location and Content-Location.
+ * Also see section 13.10 for cache requirements of some methods.
+ */
+public final class Location extends HeaderUri {
+
+       /**
+        * Returns a parsed <code>Location</code> header.
+        *
+        * @param value The <code>Location</code> header string.
+        * @return The parsed <code>Location</code> header, or <jk>null</jk> if 
the string was null.
+        */
+       public static Location forString(String value) {
+               if (value == null)
+                       return null;
+               return new Location(value);
+       }
+
+       private Location(String value) {
+               super(value);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/MaxForwards.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/http/MaxForwards.java 
b/juneau-core/src/main/java/org/apache/juneau/http/MaxForwards.java
new file mode 100644
index 0000000..bbe9534
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/MaxForwards.java
@@ -0,0 +1,65 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+/**
+ * Represents a parsed <l>Max-Forwards</l> HTTP request header.
+ * <p>
+ * Limit the number of times the message can be forwarded through proxies or 
gateways.
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     Max-Forwards: 10
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ *
+ * The Max-Forwards request-header field provides a mechanism with the TRACE 
(section 9.8) and OPTIONS (section 9.2)
+ * methods to limit the number of proxies or gateways that can forward the 
request to the next inbound server.
+ * This can be useful when the client is attempting to trace a request chain 
which appears to be failing or looping in
+ * mid-chain.
+ * <p class='bcode'>
+ *     Max-Forwards   = "Max-Forwards" ":" 1*DIGIT
+ * </p>
+ * <p>
+ * The Max-Forwards value is a decimal integer indicating the remaining number 
of times this request message may be
+ * forwarded.
+ * <p>
+ * Each proxy or gateway recipient of a TRACE or OPTIONS request containing a 
Max-Forwards header field MUST check and
+ * update its value prior to forwarding the request.
+ * If the received value is zero (0), the recipient MUST NOT forward the 
request; instead, it MUST respond as the final
+ * recipient.
+ * If the received Max-Forwards value is greater than zero, then the forwarded 
message MUST contain an updated
+ * Max-Forwards field with a value decremented by one (1).
+ * <p>
+ * The Max-Forwards header field MAY be ignored for all other methods defined 
by this specification and for any
+ * extension methods for which it is not explicitly referred to as part of 
that method definition.
+ */
+public final class MaxForwards extends HeaderInteger {
+
+       /**
+        * Returns a parsed <code>Max-Forwards</code> header.
+        *
+        * @param value The <code>Max-Forwards</code> header string.
+        * @return The parsed <code>Max-Forwards</code> header, or 
<jk>null</jk> if the string was null.
+        */
+       public static MaxForwards forString(String value) {
+               if (value == null)
+                       return null;
+               return new MaxForwards(value);
+       }
+
+       private MaxForwards(String value) {
+               super(value);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/Pragma.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/http/Pragma.java 
b/juneau-core/src/main/java/org/apache/juneau/http/Pragma.java
new file mode 100644
index 0000000..9c2b3e7
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/Pragma.java
@@ -0,0 +1,71 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+/**
+ * Represents a parsed <l>Pragma</l> HTTP request/response header.
+ * <p>
+ * Implementation-specific fields that may have various effects anywhere along 
the request-response chain.
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     Pragma: no-cache
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ * The Pragma general-header field is used to include implementation- specific 
directives that might apply to any
+ * recipient along the request/response chain.
+ * All pragma directives specify optional behavior from the viewpoint of the 
protocol; however, some systems MAY
+ * require that behavior be consistent with the directives.
+ * <p class='bcode'>
+ *     Pragma            = "Pragma" ":" 1#pragma-directive
+ *     pragma-directive  = "no-cache" | extension-pragma
+ *     extension-pragma  = token [ "=" ( token | quoted-string ) ]
+ * </p>
+ * <p>
+ * When the no-cache directive is present in a request message, an application 
SHOULD forward the request toward the
+ * origin server even if it has a cached copy of what is being requested.
+ * This pragma directive has the same semantics as the no-cache 
cache-directive (see section 14.9) and is defined here
+ * for backward compatibility with HTTP/1.0.
+ * Clients SHOULD include both header fields when a no-cache request is sent 
to a server not known to be HTTP/1.1
+ * compliant.
+ * <p>
+ * Pragma directives MUST be passed through by a proxy or gateway application, 
regardless of their significance to that
+ * application, since the directives might be applicable to all recipients 
along the request/response chain.
+ * It is not possible to specify a pragma for a specific recipient; however, 
any pragma directive not relevant to a
+ * recipient SHOULD be ignored by that recipient.
+ * <p>
+ * HTTP/1.1 caches SHOULD treat "Pragma: no-cache" as if the client had sent 
"Cache-Control: no-cache".
+ * No new Pragma directives will be defined in HTTP.
+ * <p>
+ * Note: because the meaning of "Pragma: no-cache as a response header field 
is not actually specified, it does not
+ * provide a reliable replacement for "Cache-Control: no-cache" in a response.
+ */
+public final class Pragma extends HeaderString {
+
+       /**
+        * Returns a parsed <code>Pragma</code> header.
+        *
+        * @param value The <code>Pragma</code> header string.
+        * @return The parsed <code>Pragma</code> header, or <jk>null</jk> if 
the string was null.
+        */
+       public static Pragma forString(String value) {
+               if (value == null)
+                       return null;
+               return new Pragma(value);
+       }
+
+       private Pragma(String value) {
+               super(value);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/ProxyAuthenticate.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/http/ProxyAuthenticate.java 
b/juneau-core/src/main/java/org/apache/juneau/http/ProxyAuthenticate.java
new file mode 100644
index 0000000..f2c8114
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/ProxyAuthenticate.java
@@ -0,0 +1,58 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+/**
+ * Represents a parsed <l> Proxy-Authenticate</l> HTTP response header.
+ * <p>
+ * Request authentication to access the proxy.
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     Proxy-Authenticate: Basic
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ *
+ * The Proxy-Authenticate response-header field MUST be included as part of a 
407 (Proxy Authentication Required)
+ * response.
+ * The field value consists of a challenge that indicates the authentication 
scheme and parameters applicable to the
+ * proxy for this Request-URI.
+ * <p class='bcode'>
+ *     Proxy-Authenticate  = "Proxy-Authenticate" ":" 1#challenge
+ * </p>
+ * <p>
+ * The HTTP access authentication process is described in "HTTP 
Authentication: Basic and Digest Access Authentication".
+ * Unlike WWW-Authenticate, the Proxy-Authenticate header field applies only 
to the current connection and SHOULD NOT
+ * be passed on to downstream clients.
+ * However, an intermediate proxy might need to obtain its own credentials by 
requesting them from the downstream
+ * client, which in some circumstances will appear as if the proxy is 
forwarding the Proxy-Authenticate header field.
+ */
+public final class ProxyAuthenticate extends HeaderString {
+
+       /**
+        * Returns a parsed <code>Proxy-Authenticate</code> header.
+        *
+        * @param value The <code>Proxy-Authenticate</code> header string.
+        * @return The parsed <code>Proxy-Authenticate</code> header, or 
<jk>null</jk> if the string was null.
+        */
+       public static ProxyAuthenticate forString(String value) {
+               if (value == null)
+                       return null;
+               return new ProxyAuthenticate(value);
+       }
+
+       private ProxyAuthenticate(String value) {
+               super(value);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/ProxyAuthorization.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/http/ProxyAuthorization.java 
b/juneau-core/src/main/java/org/apache/juneau/http/ProxyAuthorization.java
new file mode 100644
index 0000000..74040af
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/ProxyAuthorization.java
@@ -0,0 +1,60 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+/**
+ * Represents a parsed <l>Proxy-Authorization</l> HTTP request header.
+ * <p>
+ * Authorization credentials for connecting to a proxy.
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ *
+ * The Proxy-Authorization request-header field allows the client to identify 
itself (or its user) to a proxy which
+ * requires authentication.
+ * The Proxy-Authorization field value consists of credentials containing the 
authentication information of the user
+ * agent for the proxy and/or realm of the resource being requested.
+ * <p class='bcode'>
+ *     Proxy-Authorization     = "Proxy-Authorization" ":" credentials
+ * </p>
+ * <p>
+ * The HTTP access authentication process is described in "HTTP 
Authentication: Basic and Digest Access Authentication".
+ * Unlike Authorization, the Proxy-Authorization header field applies only to 
the next outbound proxy that demanded
+ * authentication using the Proxy-Authenticate field.
+ * When multiple proxies are used in a chain, the Proxy-Authorization header 
field is consumed by the first outbound
+ * proxy that was expecting to receive credentials.
+ * A proxy MAY relay the credentials from the client request to the next proxy 
if that is the mechanism by which the
+ * proxies cooperatively authenticate a given request.
+ */
+public final class ProxyAuthorization extends HeaderString {
+
+       /**
+        * Returns a parsed <code>Proxy-Authorization</code> header.
+        *
+        * @param value The <code>Proxy-Authorization</code> header string.
+        * @return The parsed <code>Proxy-Authorization</code> header, or 
<jk>null</jk> if the string was null.
+        */
+       public static ProxyAuthorization forString(String value) {
+               if (value == null)
+                       return null;
+               return new ProxyAuthorization(value);
+       }
+
+       private ProxyAuthorization(String value) {
+               super(value);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/Range.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/http/Range.java 
b/juneau-core/src/main/java/org/apache/juneau/http/Range.java
new file mode 100644
index 0000000..3179358
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/Range.java
@@ -0,0 +1,136 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+/**
+ * Represents a parsed <l>Range</l> HTTP request header.
+ * <p>
+ * Request only part of an entity. Bytes are numbered from 0.
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     Range: bytes=500-999
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ *
+ * Since all HTTP entities are represented in HTTP messages as sequences of 
bytes, the concept of a byte range is
+ * meaningful for any HTTP entity.
+ * (However, not all clients and servers need to support byte- range 
operations.)
+ * <p>
+ * Byte range specifications in HTTP apply to the sequence of bytes in the 
entity-body (not necessarily the same as the
+ * message-body).
+ * <p>
+ * A byte range operation MAY specify a single range of bytes, or a set of 
ranges within a single entity.
+ * <p class='bcode'>
+ *     ranges-specifier = byte-ranges-specifier
+ *     byte-ranges-specifier = bytes-unit "=" byte-range-set
+ *     byte-range-set  = 1#( byte-range-spec | suffix-byte-range-spec )
+ *     byte-range-spec = first-byte-pos "-" [last-byte-pos]
+ *     first-byte-pos  = 1*DIGIT
+ *     last-byte-pos   = 1*DIGIT
+ * </p>
+ * <p>
+ * The first-byte-pos value in a byte-range-spec gives the byte-offset of the 
first byte in a range.
+ * The last-byte-pos value gives the byte-offset of the last byte in the 
range; that is, the byte positions specified
+ * are inclusive.
+ * Byte offsets start at zero.
+ * <p>
+ * If the last-byte-pos value is present, it MUST be greater than or equal to 
the first-byte-pos in that
+ * byte-range-spec, or the byte- range-spec is syntactically invalid.
+ * The recipient of a byte-range- set that includes one or more syntactically 
invalid byte-range-spec values MUST
+ * ignore the header field that includes that byte-range-set.
+ * <p>
+ * If the last-byte-pos value is absent, or if the value is greater than or 
equal to the current length of the
+ * entity-body, last-byte-pos is taken to be equal to one less than the 
current length of the entity-body in bytes.
+ * <p>
+ * By its choice of last-byte-pos, a client can limit the number of bytes 
retrieved without knowing the size of the
+ * entity.
+ * <p class='bcode'>
+ *     suffix-byte-range-spec = "-" suffix-length
+ *     suffix-length = 1*DIGIT
+ * </p>
+ * <p>
+ * A suffix-byte-range-spec is used to specify the suffix of the entity-body, 
of a length given by the suffix-length
+ * value.
+ * (That is, this form specifies the last N bytes of an entity-body.)
+ * If the entity is shorter than the specified suffix-length, the entire 
entity-body is used.
+ * <p>
+ * If a syntactically valid byte-range-set includes at least one byte- 
range-spec whose first-byte-pos is less than the
+ * current length of the entity-body, or at least one suffix-byte-range-spec 
with a non-zero suffix-length, then the
+ * byte-range-set is satisfiable.
+ * Otherwise, the byte-range-set is unsatisfiable.
+ * If the byte-range-set is unsatisfiable, the server SHOULD return a response 
with a status of 416 (Requested range
+ * not satisfiable).
+ * Otherwise, the server SHOULD return a response with a status of 206 
(Partial Content) containing the satisfiable
+ * ranges of the entity-body.
+ * <p>
+ * Examples of byte-ranges-specifier values (assuming an entity-body of length 
10000):
+ * <p class='bcode'>
+ *     - The first 500 bytes (byte offsets 0-499, inclusive):  bytes=0-499
+ *     - The second 500 bytes (byte offsets 500-999, inclusive):  bytes=500-999
+ *     - The final 500 bytes (byte offsets 9500-9999, inclusive):  bytes=-500
+ *     - Or bytes=9500-
+ *     - The first and last bytes only (bytes 0 and 9999):  bytes=0-0,-1
+ *     - Several legal but not canonical specifications of the second 500 
bytes (byte offsets 500-999, inclusive):
+ *        bytes=500-600,601-999
+ *        bytes=500-700,601-999
+ * </p>
+ * <p>
+ * HTTP retrieval requests using conditional or unconditional GET methods MAY 
request one or more sub-ranges of the
+ * entity, instead of the entire entity, using the Range request header, which 
applies to the entity returned as the r
+ * esult of the request:
+ * <p class='bcode'>
+ *     Range = "Range" ":" ranges-specifier
+ * </p>
+ * <p>
+ * A server MAY ignore the Range header.
+ * However, HTTP/1.1 origin servers and intermediate caches ought to support 
byte ranges when possible, since Range
+ * supports efficient recovery from partially failed transfers, and supports 
efficient partial retrieval of large
+ * entities.
+ * <p>
+ * If the server supports the Range header and the specified range or ranges 
are appropriate for the entity:
+ * <ul>
+ *     <li>The presence of a Range header in an unconditional GET modifies 
what is returned if the GET is otherwise
+ *             successful.
+ *             In other words, the response carries a status code of 206 
(Partial Content) instead of 200 (OK).
+ *     <li>The presence of a Range header in a conditional GET (a request 
using one or both of If-Modified-Since and
+ *             If-None-Match, or one or both of If-Unmodified-Since and 
If-Match) modifies what is returned if the GET is
+ *             otherwise successful and the condition is true. It does not 
affect the 304 (Not Modified) response returned if
+ *             the conditional is false.
+ * </ul>
+ * In some cases, it might be more appropriate to use the If-Range header (see 
section 14.27) in addition to the Range
+ * header.
+ * <p>
+ * If a proxy that supports ranges receives a Range request, forwards the 
request to an inbound server, and receives an
+ * entire entity in reply, it SHOULD only return the requested range to its 
client.
+ * It SHOULD store the entire received response in its cache if that is 
consistent with its cache allocation policies.
+ */
+public final class Range extends HeaderString {
+
+       /**
+        * Returns a parsed <code>Range</code> header.
+        *
+        * @param value The <code>Range</code> header string.
+        * @return The parsed <code>Range</code> header, or <jk>null</jk> if 
the string was null.
+        */
+       public static Range forString(String value) {
+               if (value == null)
+                       return null;
+               return new Range(value);
+       }
+
+       private Range(String value) {
+               super(value);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/Referer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/http/Referer.java 
b/juneau-core/src/main/java/org/apache/juneau/http/Referer.java
new file mode 100644
index 0000000..55c9433
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/Referer.java
@@ -0,0 +1,65 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+/**
+ * Represents a parsed <l>Referer</l> HTTP request header.
+ * <p>
+ * This is the address of the previous web page from which a link to the 
currently requested page was followed.
+ * (The word “referrer” has been misspelled in the RFC as well as in most 
implementations to the point that it has
+ * become standard usage and is considered correct terminology)
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     Referer: http://en.wikipedia.org/wiki/Main_Page
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ *
+ * The Referer[sic] request-header field allows the client to specify, for the 
server's benefit, the address (URI) of
+ * the resource from which the Request-URI was obtained (the "referrer", 
although the header field is misspelled.)
+ * The Referer request-header allows a server to generate lists of back-links 
to resources for interest, logging,
+ * optimized caching, etc.
+ * It also allows obsolete or mistyped links to be traced for maintenance.
+ * The Referer field MUST NOT be sent if the Request-URI was obtained from a 
source that does not have its own URI,
+ * such as input from the user keyboard.
+ * <p class='bcode'>
+ *     Referer        = "Referer" ":" ( absoluteURI | relativeURI )
+ * </p>
+ * <p>
+ * Example:
+ * <p class='bcode'>
+ *     Referer: http://www.w3.org/hypertext/DataSources/Overview.html
+ * </p>
+ * <p>
+ * If the field value is a relative URI, it SHOULD be interpreted relative to 
the Request-URI.
+ * The URI MUST NOT include a fragment. See section 15.1.3 for security 
considerations.
+ */
+public final class Referer extends HeaderUri {
+
+       /**
+        * Returns a parsed <code>Referer</code> header.
+        *
+        * @param value The <code>Referer</code> header string.
+        * @return The parsed <code>Referer</code> header, or <jk>null</jk> if 
the string was null.
+        */
+       public static Referer forString(String value) {
+               if (value == null)
+                       return null;
+               return new Referer(value);
+       }
+
+       private Referer(String value) {
+               super(value);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/RetryAfter.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/http/RetryAfter.java 
b/juneau-core/src/main/java/org/apache/juneau/http/RetryAfter.java
new file mode 100644
index 0000000..608f02e
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/RetryAfter.java
@@ -0,0 +1,94 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+import static org.apache.juneau.internal.StringUtils.*;
+
+import org.apache.juneau.internal.*;
+
+/**
+ * Represents a parsed <l>Retry-After</l> HTTP response header.
+ * <p>
+ * If an entity is temporarily unavailable, this instructs the client to try 
again later.
+ * Value could be a specified period of time (in seconds) or a HTTP-date.
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     Retry-After: 120
+ *     Retry-After: Fri, 07 Nov 2014 23:59:59 GMT
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ * The Retry-After response-header field can be used with a 503 (Service 
Unavailable) response to indicate how long the
+ * service is expected to be unavailable to the requesting client.
+ * This field MAY also be used with any 3xx (Redirection) response to indicate 
the minimum time the user-agent is asked
+ * wait before issuing the redirected request.
+ * The value of this field can be either an HTTP-date or an integer number of 
seconds (in decimal) after the time of the
+ * response.
+ * <p class='bcode'>
+ *     Retry-After  = "Retry-After" ":" ( HTTP-date | delta-seconds )
+ * </p>
+ * <p>
+ * Two examples of its use are
+ * <p class='bcode'>
+ *     Retry-After: Fri, 31 Dec 1999 23:59:59 GMT
+ *     Retry-After: 120
+ * </p>
+ * <p>
+ * In the latter example, the delay is 2 minutes.
+ */
+public final class RetryAfter extends HeaderString {
+
+       /**
+        * Returns a parsed <code>Retry-After</code> header.
+        *
+        * @param value The <code>Retry-After</code> header string.
+        * @return The parsed <code>Retry-After</code> header, or <jk>null</jk> 
if the string was null.
+        */
+       public static RetryAfter forString(String value) {
+               if (value == null)
+                       return null;
+               return new RetryAfter(value);
+       }
+
+       private RetryAfter(String value) {
+               super(value);
+       }
+
+       /**
+        * Returns this header value as a {@link java.util.Date} object.
+        * @return This header value as a {@link java.util.Date} object, or 
<jk>null</jk> if the value is not a date.
+        */
+       public java.util.Date asDate() {
+               char c0 = charAt(value, 0);
+               if (c0 >= '0' && c0 <= '9')
+                       return null;
+               return DateUtils.parseDate(toString());
+       }
+
+       /**
+        * Returns this header value as an integer.
+        * @return This header value as a integer, or <code>-1</code> if the 
value is not an integer.
+        */
+       public int asInt() {
+               char c0 = charAt(value, 0);
+               if (c0 >= '0' && c0 <= '9') {
+                       try {
+                               return Integer.parseInt(value);
+                       } catch (NumberFormatException e) {
+                               return -1;
+                       }
+               }
+               return -1;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/Server.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/http/Server.java 
b/juneau-core/src/main/java/org/apache/juneau/http/Server.java
new file mode 100644
index 0000000..a8f2a13
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/Server.java
@@ -0,0 +1,65 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+/**
+ * Represents a parsed <l>Server</l> HTTP response header.
+ * <p>
+ * A name for the server.
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     Server: Apache/2.4.1 (Unix)
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ *
+ * The Server response-header field contains information about the software 
used by the origin server to handle the
+ * request.
+ * The field can contain multiple product tokens (section 3.8) and comments 
identifying the server and any significant
+ * subproducts.
+ * The product tokens are listed in order of their significance for 
identifying the application.
+ * <p class='bcode'>
+ *     Server         = "Server" ":" 1*( product | comment )
+ * </p>
+ * <p>
+ * Example:
+ * <p class='bcode'>
+ *     Server: CERN/3.0 libwww/2.17
+ * </p>
+ * <p>
+ * If the response is being forwarded through a proxy, the proxy application 
MUST NOT modify the Server response-header.
+ * Instead, it SHOULD include a Via field (as described in section 14.45).
+ * <p>
+ * Note: Revealing the specific software version of the server might allow the 
server machine to become more vulnerable
+ * to attacks against software that is known to contain security holes.
+ * Server implementors are encouraged to make this field a configurable option.
+ */
+public final class Server extends HeaderString {
+
+       /**
+        * Returns a parsed <code>Server</code> header.
+        *
+        * @param value The <code>Server</code> header string.
+        * @return The parsed <code>Server</code> header, or <jk>null</jk> if 
the string was null.
+        */
+       public static Server forString(String value) {
+               if (value == null)
+                       return null;
+               return new Server(value);
+       }
+
+       private Server(String value) {
+               super(value);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/StringRange.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/http/StringRange.java 
b/juneau-core/src/main/java/org/apache/juneau/http/StringRange.java
new file mode 100644
index 0000000..d2e0fc5
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/StringRange.java
@@ -0,0 +1,276 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+import java.util.*;
+import java.util.Map.*;
+
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.internal.*;
+
+/**
+ * Represents a single value in a comma-delimited header value that optionally 
contains a quality
+ * metric for comparison and extension parameters.
+ * <p>
+ * Similar in concept to {@link MediaTypeRange} except instead of media types 
(e.g. <js>"text/json"</js>),
+ * it's a simple type (e.g. <js>"iso-8601"</js>).
+ * <p>
+ * An example of a type range is a value in an <code>Accept-Encoding</code> 
header.
+ */
+@BeanIgnore
+public final class StringRange implements Comparable<StringRange>  {
+
+       private static final StringRange[] DEFAULT = new StringRange[]{new 
StringRange("*")};
+
+       private final String type;
+       private final Float qValue;
+       private final Map<String,Set<String>> extensions;
+
+       /**
+        * Parses a header such as an <code>Accept-Encoding</code> header value 
into an array of type ranges.
+        * <p>
+        * The syntax expected to be found in the referenced <code>value</code> 
complies with the syntax described in RFC2616, Section 14.1, as described below:
+        * <p class='bcode'>
+        *      Accept-Encoding  = "Accept-Encoding" ":"
+        *                         1#( codings [ ";" "q" "=" qvalue ] )
+        *      codings          = ( content-coding | "*" )
+        * </p>
+        * <p>
+        * Examples of its use are:
+        * <p class='bcode'>
+        *      Accept-Encoding: compress, gzip
+        *      Accept-Encoding:
+        *      Accept-Encoding: *
+        *      Accept-Encoding: compress;q=0.5, gzip;q=1.0
+        *      Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0
+        * </p>
+        *
+        * @param value The value to parse.  If <jk>null</jk> or empty, returns 
a single <code>TypeRange</code> is returned that represents all types.
+        * @return The type ranges described by the string.
+        * <br>The ranges are sorted such that the most acceptable type is 
available at ordinal position <js>'0'</js>, and the least acceptable at 
position n-1.
+        */
+       public static StringRange[] parse(String value) {
+
+               if (value == null || value.length() == 0)
+                       return DEFAULT;
+
+               if (value.indexOf(',') == -1)
+                       return new StringRange[]{new StringRange(value)};
+
+               Set<StringRange> ranges = new TreeSet<StringRange>();
+
+               for (String r : StringUtils.split(value, ',')) {
+                       r = r.trim();
+
+                       if (r.isEmpty())
+                               continue;
+
+                       ranges.add(new StringRange(r));
+               }
+
+               return ranges.toArray(new StringRange[ranges.size()]);
+       }
+
+       @SuppressWarnings("unchecked")
+       private StringRange(String token) {
+               Builder b = new Builder(token);
+               this.type = b.type;
+               this.qValue = b.qValue;
+               this.extensions = (b.extensions == null ? Collections.EMPTY_MAP 
: Collections.unmodifiableMap(b.extensions));
+       }
+
+       private static class Builder {
+               private String type;
+               private Float qValue = 1f;
+               private Map<String,Set<String>> extensions;
+
+               private Builder(String token) {
+
+                       token = token.trim();
+
+                       int i = token.indexOf(";q=");
+
+                       if (i == -1) {
+                               type = token;
+                               return;
+                       }
+
+                       type = token.substring(0, i);
+
+                       String[] tokens = token.substring(i+1).split(";");
+
+                       // Only the type of the range is specified
+                       if (tokens.length > 0) {
+                               boolean isInExtensions = false;
+                               for (int j = 0; j < tokens.length; j++) {
+                                       String[] parm = tokens[j].split("=");
+                                       if (parm.length == 2) {
+                                               String k = parm[0], v = parm[1];
+                                               if (isInExtensions) {
+                                                       if (extensions == null)
+                                                               extensions = 
new TreeMap<String,Set<String>>();
+                                                       if (! 
extensions.containsKey(k))
+                                                               
extensions.put(k, new TreeSet<String>());
+                                                       
extensions.get(k).add(v);
+                                               } else if (k.equals("q")) {
+                                                       qValue = new Float(v);
+                                                       isInExtensions = true;
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       /**
+        * Returns the type enclosed by this type range.
+        *
+        * <h5 class='section'>Examples:</h5>
+        * <ul>
+        *      <li><js>"compress"</js>
+        *      <li><js>"gzip"</js>
+        *      <li><js>"*"</js>
+        * </ul>
+        *
+        * @return The type of this type range, lowercased, never <jk>null</jk>.
+        */
+       public String getType() {
+               return type;
+       }
+
+       /**
+        * Returns the <js>'q'</js> (quality) value for this type, as described 
in Section 3.9 of RFC2616.
+        * <p>
+        * The quality value is a float between <code>0.0</code> (unacceptable) 
and <code>1.0</code> (most acceptable).
+        * <p>
+        * If 'q' value doesn't make sense for the context (e.g. this range was 
extracted from a <js>"content-*"</js> header, as opposed to <js>"accept-*"</js>
+        * header, its value will always be <js>"1"</js>.
+        *
+        * @return The 'q' value for this type, never <jk>null</jk>.
+        */
+       public Float getQValue() {
+               return qValue;
+       }
+
+       /**
+        * Returns the optional set of custom extensions defined for this type.
+        * <p>
+        * Values are lowercase and never <jk>null</jk>.
+        *
+        * @return The optional list of extensions, never <jk>null</jk>.
+        */
+       public Map<String,Set<String>> getExtensions() {
+               return extensions;
+       }
+
+       /**
+        * Provides a string representation of this media range, suitable for 
use as an <code>Accept</code> header value.
+        * <p>
+        * The literal text generated will be all lowercase.
+        *
+        * @return A media range suitable for use as an Accept header value, 
never <code>null</code>.
+        */
+       @Override /* Object */
+       public String toString() {
+               StringBuffer sb = new StringBuffer().append(type);
+
+               // '1' is equivalent to specifying no qValue. If there's no 
extensions, then we won't include a qValue.
+               if (qValue.floatValue() == 1.0) {
+                       if (! extensions.isEmpty()) {
+                               sb.append(";q=").append(qValue);
+                               for (Entry<String,Set<String>> e : 
extensions.entrySet()) {
+                                       String k = e.getKey();
+                                       for (String v : e.getValue())
+                                               
sb.append(';').append(k).append('=').append(v);
+                               }
+                       }
+               } else {
+                       sb.append(";q=").append(qValue);
+                       for (Entry<String,Set<String>> e : 
extensions.entrySet()) {
+                               String k = e.getKey();
+                               for (String v : e.getValue())
+                                       
sb.append(';').append(k).append('=').append(v);
+                       }
+               }
+               return sb.toString();
+       }
+
+       /**
+        * Returns <jk>true</jk> if the specified object is also a 
<code>MediaType</code>, and has the same qValue, type, parameters, and 
extensions.
+        *
+        * @return <jk>true</jk> if object is equivalent.
+        */
+       @Override /* Object */
+       public boolean equals(Object o) {
+
+               if (o == null || !(o instanceof StringRange))
+                       return false;
+
+               if (this == o)
+                       return true;
+
+               StringRange o2 = (StringRange) o;
+               return qValue.equals(o2.qValue)
+                       && type.equals(o2.type)
+                       && extensions.equals(o2.extensions);
+       }
+
+       /**
+        * Returns a hash based on this instance's <code>media-type</code>.
+        *
+        * @return A hash based on this instance's <code>media-type</code>.
+        */
+       @Override /* Object */
+       public int hashCode() {
+               return type.hashCode();
+       }
+
+       /**
+        * Compares two MediaRanges for equality.
+        * <p>
+        * The values are first compared according to <code>qValue</code> 
values.
+        * Should those values be equal, the <code>type</code> is then 
lexicographically compared (case-insensitive) in ascending order,
+        *      with the <js>"*"</js> type demoted last in that order.
+        * <code>TypeRanges</code> with the same types but with extensions are 
promoted over those same types with no extensions.
+        *
+        * @param o The range to compare to.  Never <jk>null</jk>.
+        */
+       @Override /* Comparable */
+       public int compareTo(StringRange o) {
+
+               // Compare q-values.
+               int qCompare = Float.compare(o.qValue, qValue);
+               if (qCompare != 0)
+                       return qCompare;
+
+               // Compare media-types.
+               // Note that '*' comes alphabetically before letters, so just 
do a reverse-alphabetical comparison.
+               int i = o.type.toString().compareTo(type.toString());
+               return i;
+       }
+
+       /**
+        * Checks if the specified type matches this range.
+        * <p>
+        * The type will match this range if the range type string is the same 
or <js>"*"</js>.
+        *
+        * @param type The type to match against this range.
+        * @return <jk>true</jk> if the specified type matches this range.
+        */
+       @SuppressWarnings("hiding")
+       public boolean matches(String type) {
+               if (qValue == 0)
+                       return false;
+               return this.type.equals(type) || this.type.equals("*");
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/TE.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/http/TE.java 
b/juneau-core/src/main/java/org/apache/juneau/http/TE.java
new file mode 100644
index 0000000..45cf296
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/TE.java
@@ -0,0 +1,97 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+import static org.apache.juneau.http.Constants.*;
+
+import org.apache.juneau.internal.*;
+
+/**
+ * Represents a parsed <l>TE</l> HTTP request header.
+ * <p>
+ * The transfer encodings the user agent is willing to accept: the same values 
as for the response header field
+ * Transfer-Encoding can be used, plus the "trailers" value (related to the 
"chunked" transfer method) to notify the
+ * server it expects to receive additional fields in the trailer after the 
last, zero-sized, chunk.
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     TE: trailers, deflate
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ *
+ * The TE request-header field indicates what extension transfer-codings it is 
willing to accept in the response and
+ * whether or not it is willing to accept trailer fields in a chunked 
transfer-coding.
+ * Its value may consist of the keyword "trailers" and/or a comma-separated 
list of extension transfer-coding names
+ * with optional accept parameters (as described in section 3.6).
+ * <p class='bcode'>
+ *     TE        = "TE" ":" #( t-codings )
+ *     t-codings = "trailers" | ( transfer-extension [ accept-params ] )
+ * </p>
+ * The presence of the keyword "trailers" indicates that the client is willing 
to accept trailer fields in a chunked
+ * transfer-coding, as defined in section 3.6.1.
+ * This keyword is reserved for use with transfer-coding values even though it 
does not itself represent a transfer-coding.
+ * <p>
+ * Examples of its use are:
+ * <p class='bcode'>
+ *     TE: deflate
+ *     TE:
+ *     TE: trailers, deflate;q=0.5
+ * </p>
+ * <p>
+ * The TE header field only applies to the immediate connection.
+ * Therefore, the keyword MUST be supplied within a Connection header field 
(section 14.10) whenever TE is present in
+ * an HTTP/1.1 message.
+ * <p>
+ * A server tests whether a transfer-coding is acceptable, according to a TE 
field, using these rules:
+ * <ol>
+ * <li>The "chunked" transfer-coding is always acceptable.
+ *     If the keyword "trailers" is listed, the client indicates that it is 
willing to accept trailer fields in the
+ *     chunked response on behalf of itself and any downstream clients.
+ *     The implication is that, if given, the client is stating that either 
all downstream clients are willing to accept
+ *     trailer fields in the forwarded response, or that it will attempt to 
buffer the response on behalf of downstream
+ *     recipients.
+ *     Note: HTTP/1.1 does not define any means to limit the size of a chunked 
response such that a client can be assured
+ *     of buffering the entire response.
+ * <li>If the transfer-coding being tested is one of the transfer-codings 
listed in the TE field, then it is acceptable
+ *     unless it is accompanied by a qvalue of 0. (As defined in section 3.9, 
a qvalue of 0 means "not acceptable.")
+ * <li>If multiple transfer-codings are acceptable, then the acceptable 
transfer-coding with the highest non-zero
+ *     qvalue is preferred.
+ *     The "chunked" transfer-coding always has a qvalue of 1.
+ * </ol>
+ * If the TE field-value is empty or if no TE field is present, the only 
transfer-coding is "chunked".
+ * A message with no transfer-coding is always acceptable.
+ */
+public final class TE extends HeaderRangeArray {
+
+       private static final Cache<String,TE> cache = new 
Cache<String,TE>(NOCACHE, CACHE_MAX_SIZE);
+
+       /**
+        * Returns a parsed <code>Accept</code> header.
+        *
+        * @param value The <code>Accept</code> header string.
+        * @return The parsed <code>Accept</code> header, or <jk>null</jk> if 
the string was null.
+        */
+       public static TE forString(String value) {
+               if (value == null)
+                       return null;
+               TE te = cache.get(value);
+               if (te == null)
+                       te = cache.put(value, new TE(value));
+               return te;
+       }
+
+       private TE(String value) {
+               super(value);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/Trailer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/http/Trailer.java 
b/juneau-core/src/main/java/org/apache/juneau/http/Trailer.java
new file mode 100644
index 0000000..90eb229
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/Trailer.java
@@ -0,0 +1,65 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+/**
+ * Represents a parsed <l>Trailer</l> HTTP response header.
+ * <p>
+ * The Trailer general field value indicates that the given set of header 
fields is present in the trailer of a message
+ * encoded with chunked transfer coding.
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     Trailer: Max-Forwards
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ *
+ * The Trailer general field value indicates that the given set of header 
fields is present in the trailer of a message
+ * encoded with chunked transfer-coding.
+ * <p class='bcode'>
+ *     Trailer  = "Trailer" ":" 1#field-name
+ * </p>
+ * <p>
+ * An HTTP/1.1 message SHOULD include a Trailer header field in a message 
using chunked transfer-coding with a non-empty
+ * trailer.
+ * Doing so allows the recipient to know which header fields to expect in the 
trailer.
+ * <p>
+ * If no Trailer header field is present, the trailer SHOULD NOT include any 
header fields.
+ * See section 3.6.1 for restrictions on the use of trailer fields in a 
"chunked" transfer-coding.
+ * <p>
+ * Message header fields listed in the Trailer header field MUST NOT include 
the following header fields:
+ * <ul>
+ *     <li>Transfer-Encoding
+ *     <li>Content-Length
+ *     <li>Trailer
+ * </ul>
+ */
+public final class Trailer extends HeaderString {
+
+       /**
+        * Returns a parsed <code>Trailer</code> header.
+        *
+        * @param value The <code>Trailer</code> header string.
+        * @return The parsed <code>Trailer</code> header, or <jk>null</jk> if 
the string was null.
+        */
+       public static Trailer forString(String value) {
+               if (value == null)
+                       return null;
+               return new Trailer(value);
+       }
+
+       private Trailer(String value) {
+               super(value);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fa4736b6/juneau-core/src/main/java/org/apache/juneau/http/TransferEncoding.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/http/TransferEncoding.java 
b/juneau-core/src/main/java/org/apache/juneau/http/TransferEncoding.java
new file mode 100644
index 0000000..ffcad37
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/http/TransferEncoding.java
@@ -0,0 +1,64 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.http;
+
+/**
+ * Represents a parsed <l>Transfer-Encoding</l> HTTP response header.
+ * <p>
+ * The form of encoding used to safely transfer the entity to the user.
+ * Currently defined methods are: chunked, compress, deflate, gzip, identity.
+ *
+ * <h6 class='figure'>Example</h6>
+ * <p class='bcode'>
+ *     Transfer-Encoding: chunked
+ * </p>
+ *
+ * <h6 class='topic'>RFC2616 Specification</h6>
+ *
+ * The Transfer-Encoding general-header field indicates what (if any) type of 
transformation has been applied to the
+ * message body in order to safely transfer it between the sender and the 
recipient.
+ * This differs from the content-coding in that the transfer-coding is a 
property of the message, not of the entity.
+ * <p class='bcode'>
+ *     Transfer-Encoding       = "Transfer-Encoding" ":" 1#transfer-coding
+ * </p>
+ * <p>
+ * Transfer-codings are defined in section 3.6. An example is:
+ * <p class='bcode'>
+ *     Transfer-Encoding: chunked
+ * </p>
+ * <p>
+ * If multiple encodings have been applied to an entity, the transfer-codings 
MUST be listed in the order in which
+ * they were applied.
+ * Additional information about the encoding parameters MAY be provided by 
other entity-header fields not defined by
+ * this specification.
+ * <p>
+ * Many older HTTP/1.0 applications do not understand the Transfer-Encoding 
header.
+ */
+public final class TransferEncoding extends HeaderString {
+
+       /**
+        * Returns a parsed <code>Transfer-Encoding</code> header.
+        *
+        * @param value The <code>Transfer-Encoding</code> header string.
+        * @return The parsed <code>Transfer-Encoding</code> header, or 
<jk>null</jk> if the string was null.
+        */
+       public static TransferEncoding forString(String value) {
+               if (value == null)
+                       return null;
+               return new TransferEncoding(value);
+       }
+
+       private TransferEncoding(String value) {
+               super(value);
+       }
+}

Reply via email to