jsdever 2003/02/01 20:30:14 Modified: httpclient/src/java/org/apache/commons/httpclient HttpMethodBase.java httpclient/src/java/org/apache/commons/httpclient/methods DeleteMethod.java EntityEnclosingMethod.java GetMethod.java HeadMethod.java MultipartPostMethod.java OptionsMethod.java PostMethod.java PutMethod.java TraceMethod.java Log: Deprecate the useDisk methods in Get, Post and EntityEnclosingMethod. Improve class documentation of all the HttpMethods. Contributed by: Jeff Dever Revision Changes Path 1.108 +34 -72 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java Index: HttpMethodBase.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v retrieving revision 1.107 retrieving revision 1.108 diff -u -r1.107 -r1.108 --- HttpMethodBase.java 1 Feb 2003 20:40:02 -0000 1.107 +++ HttpMethodBase.java 2 Feb 2003 04:30:13 -0000 1.108 @@ -83,74 +83,46 @@ import org.apache.commons.logging.LogFactory; /** + * An abstract base implementation of HttpMethod. * <p> - * An abstract base implementation of {@link HttpMethod}. - * </p> - * - * <p> - * At minimum, subclasses will need to override - * </p> - * - * <dl> - * <dt> - * {@link #getName} - * </dt> - * <dd> - * to return the approriate name for this method - * </dd> - * </dl> + * At minimum, subclasses will need to override: + * <ul> + * <li>{@link #getName} to return the approriate name for this method + * </li> + * </ul> * * <p> * When a method's request may contain a body, subclasses will typically want * to override: + * <ul> + * <li>{@link #getRequestContentLength} to indicate the length (in bytes) + * of that body</li> + * <li>{@link #writeRequestBody writeRequestBody(HttpState,HttpConnection)} + * to write the body</li> + * </ul> * </p> * - * <dl> - * <dt> - * {@link #getRequestContentLength} - * </dt> - * <dd> - * to indicate the length (in bytes) of that body - * </dd> - * <dt> - * {@link #writeRequestBody writeRequestBody(HttpState,HttpConnection)} - * </dt> - * <dd> - * to write the body - * </dd> - * </dl> - * * <p> * When a method requires additional request headers, subclasses will typically * want to override: + * <ul> + * <li>{@link #addRequestHeaders addRequestHeaders(HttpState,HttpConnection)} + * to write those headers + * </li> + * </ul> * </p> * - * <dl> - * <dt> - * {@link #addRequestHeaders addRequestHeaders(HttpState,HttpConnection)} - * </dt> - * <dd> - * to write those headers - * </dd> - * </dl> - * * <p> * When a method expects specific response headers, subclasses may want to * override: + * <ul> + * <li>{@link #processResponseHeaders processResponseHeaders(HttpState,HttpConnection)} + * to handle those headers + * </li> + * </ul> * </p> * - * <dl> - * <dt> - * {@link #processResponseHeaders - * processResponseHeaders(HttpState,HttpConnection)} - * </dt> - * <dd> - * to handle those headers - * </dd> - * </dl> * - * - * @version $Revision$ $Date$ * @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a> * @author Rodney Waldhoff * @author Sean C. Sullivan @@ -162,6 +134,8 @@ * @author Michael Becke * @author <a href="mailto:[EMAIL PROTECTED]">Oleg Kalnichevski</a> * @author <a href="mailto:[EMAIL PROTECTED]">Mike Bowler</a> + * + * @version $Revision$ $Date$ */ public abstract class HttpMethodBase implements HttpMethod { @@ -169,6 +143,7 @@ /** Maximum number of redirects and authentications that will be followed */ private static final int MAX_FORWARDS = 100; + // -------------------------------------------------------------- Constants /** Log object for this class. */ @@ -696,9 +671,11 @@ * * <b>Note:</b> The string conversion done on the data is done with the * default character encoding. The use of this method may be non-portable. + * To ensure portability, you can use {@link #getResponseBody()} to get + * the body as an array of bytes and then do your own character encoding. * - * @return my response body, if any, as a {@link String}. Otherwise return - * <tt>null</tt>. + * @return Stringified form of the responseBody if it exists, + * otherwise <tt>null</tt>. */ public String getResponseBodyAsString() { byte[] rawdata = null; @@ -712,7 +689,6 @@ } } - /** * Return an array of response footers. * @return <tt>null</tt> if no footers are available @@ -879,8 +855,7 @@ } /** - * TODO: Determine what the intent of this method is. It appears to be - * checking validity of the method. + * Check to see if the this method is ready to be executed. * * @param state The state. * @param conn The connection. @@ -901,7 +876,6 @@ if (!validate()) { throw new HttpException("Not valid"); } - if (inExecute) { throw new IllegalStateException("Execute invoked recursively, or exited abnormally."); } @@ -940,15 +914,12 @@ inExecute = true; try { - //TODO: This method is too large - //pre-emptively add the authorization header, if required. Authenticator.authenticate(this, state); if (conn.isProxied()) { Authenticator.authenticateProxy(this, state); } - //Set visited = new HashSet(); realms = new HashSet(); proxyRealms = new HashSet(); int forwardCount = 0; //protect from an infinite loop @@ -972,16 +943,6 @@ // nope, no retry needed, exit loop. break; } - /* - Revisiting may be desired. We do not know about the server's internal state. - - //check to see if we have visited this url before - if (visited.contains(generateVisitedKey(conn))) { - LOG.error("Link " + generateVisitedKey(conn) + "' revisited"); - return statusCode; - } - visited.add(generateVisitedKey(conn)); - */ // retry - close previous stream. Caution - this causes // responseBodyConsumed to be called, which may also close the @@ -997,6 +958,7 @@ throw new HttpRecoverableException("Maximum redirects (" + MAX_FORWARDS + ") exceeded"); } + } finally { inExecute = false; // If the response has been fully processed, return the connection 1.11 +15 -5 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/DeleteMethod.java Index: DeleteMethod.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/DeleteMethod.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- DeleteMethod.java 28 Jan 2003 22:25:24 -0000 1.10 +++ DeleteMethod.java 2 Feb 2003 04:30:13 -0000 1.11 @@ -67,12 +67,22 @@ /** - * DELETE Method. - * Implements an HTTP DELETE request. + * Implements the HTTP DELETE specification. + * <p> + * The HTTP DELETE method is defined in section 9.7 of + * <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>: + * <blockquote> + * The DELETE method requests that the origin server delete the resource + * identified by the Request-URI. This method MAY be overridden by human + * intervention (or other means) on the origin server. + * </blockquote> + * </p> * * @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a> * @author <a href="mailto:[EMAIL PROTECTED]">B.C. Holmes</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Jeff Dever</a> * + * @version $Revision$ * @since 1.0 */ public class DeleteMethod 1.5 +10 -6 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/EntityEnclosingMethod.java Index: EntityEnclosingMethod.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/EntityEnclosingMethod.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- EntityEnclosingMethod.java 2 Feb 2003 00:00:23 -0000 1.4 +++ EntityEnclosingMethod.java 2 Feb 2003 04:30:13 -0000 1.5 @@ -87,8 +87,10 @@ * that can enclose an entity within requests * * @author <a href="mailto:[EMAIL PROTECTED]">Oleg Kalnichevski</a> - * + * @author <a href="mailto:[EMAIL PROTECTED]">Jeff Dever</a> + * * @since 2.0beta1 + * @version $Revision$ */ public abstract class EntityEnclosingMethod extends GetMethod { @@ -156,6 +158,7 @@ * @param uri either an absolute or relative URI * @param tempDir directory to store temp files in * + * @deprecated the client is responsible for disk I/O * @since 2.0 */ public EntityEnclosingMethod(String uri, String tempDir) { @@ -170,6 +173,7 @@ * @param tempDir directory to store temp files in * @param tempFile file to store temporary data in * + * @deprecated the client is responsible for disk I/O * @since 2.0 */ public EntityEnclosingMethod(String uri, String tempDir, String tempFile) { @@ -358,8 +362,8 @@ super.addRequestHeaders(state, conn); // Send expectation header, provided there's something to be sent - if (isHttp11() && getUseExpectHeader() && - ((this.requestBodyStream != null) || this.buffer != null)) { + if (isHttp11() && getUseExpectHeader() && ((this.requestBodyStream != null) + || this.buffer != null)) { if (getRequestHeader("Expect") == null) { setRequestHeader("Expect", "100-continue"); } 1.23 +71 -13 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/GetMethod.java Index: GetMethod.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/GetMethod.java,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- GetMethod.java 28 Jan 2003 22:25:25 -0000 1.22 +++ GetMethod.java 2 Feb 2003 04:30:13 -0000 1.23 @@ -79,41 +79,87 @@ import org.apache.commons.logging.LogFactory; /** - * GET Method. Implements an HTTP GET request. - * + * Implements the HTTP GET specification. + * <p> + * The HTTP GET method is defined in section 8.1 of + * <a href="http://www.ietf.org/rfc/rfc1945.txt">RFC1945</a>: + * <blockquote> + * The GET method means retrieve whatever information (in the form of an + * entity) is identified by the Request-URI. If the Request-URI refers + * to a data-producing process, it is the produced data which shall be + * returned as the entity in the response and not the source text of the + * process, unless that text happens to be the output of the process. + * </blockquote> + * </p> + * <p> + * GetMethods will follow redirect requests from the http server by default. + * This behavour can be disabled by calling setFollowRedirects(false).</p> + * <p> + * The useDisk methods have been deprecated. Disk I/O is the responsibility + * of the client. If you need to write a response body to a file, you + * can use the following as an example: + * <pre> + * out = new FileOutputStream(myFile); + * InputStream in = getResponseBodyAsStream(); + * byte[] buffer = new byte[10000]; + * int len ; + * while ((len = in.read(buffer)) > 0) { + * out.write(buffer, 0, len); + * } + * in.close(); + * out.close(); + * </pre> + * </p> + * * @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a> * @author Sung-Gu Park * @author Sean C. Sullivan * @author <a href="mailto:[EMAIL PROTECTED]">Mike Bowler</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Jeff Dever</a> + * + * @version $Revision$ * @since 1.0 */ public class GetMethod extends HttpMethodBase { - //~ Static variables/initializers ·········································· // -------------------------------------------------------------- Constants /** Log object for this class. */ private static final Log LOG = LogFactory.getLog(GetMethod.class); - /** Temporary directory. */ + /** + * Temporary directory. + * @deprecated the client is responsible for disk I/O + */ private static final String TEMP_DIR = "temp/"; // ----------------------------------------------------- Instance Variables - /** File which contains the buffered data. */ + /** + * File which contains the buffered data. + * @deprecated the client is responsible for disk I/O + */ private File fileData; - /** Temporary directory to use. */ + /** + * Temporary directory to use. + * @deprecated the client is responsible for disk I/O + */ private String tempDir = TEMP_DIR; - /** Temporary file to use. */ + /** + * Temporary file to use. + * @deprecated the client is responsible for disk I/O + */ private String tempFile = null; - /** By default, the get method will buffer read data to the memory. */ + /** + * By default, the get method will buffer read data to the memory. + * @deprecated the client is responsible for disk I/O + */ private boolean useDisk = false; - //~ Constructors ··························································· // ----------------------------------------------------------- Constructors @@ -145,6 +191,7 @@ * @param path the path to request * @param tempDir the directory in which to store temporary files * + * @deprecated the client is responsible for disk I/O * @since 1.0 */ public GetMethod(String path, String tempDir) { @@ -162,6 +209,7 @@ * @param tempDir the directory in which to store temporary files * @param tempFile the file (under tempDir) to buffer contents to * + * @deprecated the client is responsible for disk I/O * @since 1.0 */ public GetMethod(String path, String tempDir, String tempFile) { @@ -179,6 +227,7 @@ * @param path the path to request * @param fileData the file to buffer contents to * + * @deprecated the client is responsible for disk I/O * @since 1.0 */ public GetMethod(String path, File fileData) { @@ -196,6 +245,7 @@ * * @param fileData the file to buffer data to * + * @deprecated the client is responsible for disk I/O * @since 1.0 */ public void setFileData(File fileData) { @@ -208,6 +258,7 @@ * * @return the file being used for buffering data * + * @deprecated the client is responsible for disk I/O * @since 1.0 */ public File getFileData() { @@ -265,6 +316,7 @@ * * @param tempDir New value of tempDir * + * @deprecated the client is responsible for disk I/O * @since 1.0 */ public void setTempDir(String tempDir) { @@ -278,6 +330,7 @@ * * @return the current temporary directory * + * @deprecated the client is responsible for disk I/O * @since 1.0 */ public String getTempDir() { @@ -289,6 +342,7 @@ * * @param tempFile New value of tempFile * + * @deprecated the client is responsible for disk I/O * @since 1.0 */ public void setTempFile(String tempFile) { @@ -301,6 +355,7 @@ * * @return the current temporary file * + * @deprecated the client is responsible for disk I/O * @since 1.0 */ public String getTempFile() { @@ -315,6 +370,7 @@ * @param useDisk If true the entire response will be buffered in a * temporary file. * + * @deprecated the client is responsible for disk I/O * @since 1.0 */ public void setUseDisk(boolean useDisk) { @@ -327,6 +383,7 @@ * * @return true if the response will be buffered * + * @deprecated the client is responsible for disk I/O * @since 1.0 */ public boolean getUseDisk() { @@ -365,7 +422,6 @@ super.readResponseBody(state, conn); - OutputStream out = null; if (useDisk) { out = new FileOutputStream(createTempFile()); @@ -385,6 +441,8 @@ * Returns the file buffer, creating it if necessary. The created file is * deleted when the VM exits. * @return Temporary file to hold the data buffer. + * + * @deprecated the client is responsible for disk I/O */ private File createTempFile() { if (fileData == null) { 1.17 +21 -4 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/HeadMethod.java Index: HeadMethod.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/HeadMethod.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- HeadMethod.java 31 Jan 2003 00:33:36 -0000 1.16 +++ HeadMethod.java 2 Feb 2003 04:30:13 -0000 1.17 @@ -72,10 +72,27 @@ import org.apache.commons.logging.LogFactory; /** - * HEAD Method. + * Implements the HTTP HEAD specification. + * <p> + * The HTTP HEAD method is defined in section 8.2 of + * <a href="http://www.ietf.org/rfc/rfc1945.txt">RFC1945</a>: + * <blockquote> + * The HEAD method is identical to GET except that the server MUST NOT + * return a message-body in the response. The metainformation contained + * in the HTTP headers in response to a HEAD request SHOULD be identical + * to the information sent in response to a GET request. This method can + * be used for obtaining metainformation about the entity implied by the + * request without transferring the entity-body itself. This method is + * often used for testing hypertext links for validity, accessibility, + * and recent modification. + * </blockquote> + * </p> * * @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a> * @author <a href="mailto:[EMAIL PROTECTED]">Mike Bowler</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Jeff Dever</a> + * + * @version $Revision$ * @since 1.0 */ public class HeadMethod extends HttpMethodBase { 1.8 +5 -3 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/MultipartPostMethod.java Index: MultipartPostMethod.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/MultipartPostMethod.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- MultipartPostMethod.java 28 Jan 2003 22:25:25 -0000 1.7 +++ MultipartPostMethod.java 2 Feb 2003 04:30:13 -0000 1.8 @@ -82,6 +82,8 @@ /** * POST Method for Multipart encoded forms. * + * TODO: Privide decent class documentation + * * @author <a href="mailto:[EMAIL PROTECTED]">Matthew Albright</a> * @author <a href="mailto:[EMAIL PROTECTED]">Jeff Dever</a> * @author <a href="mailto:[EMAIL PROTECTED]">Adrian Sutton</a> 1.12 +18 -4 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/OptionsMethod.java Index: OptionsMethod.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/OptionsMethod.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- OptionsMethod.java 28 Jan 2003 22:25:25 -0000 1.11 +++ OptionsMethod.java 2 Feb 2003 04:30:13 -0000 1.12 @@ -76,11 +76,25 @@ /** - * OPTIONS Method. + * Implements the HTTP OPTIONS specification. + * <p> + * The HTTP OPTIONS method is defined in section 9.2 of + * <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>: + * <blockquote> + * The OPTIONS method represents a request for information about the + * communication options available on the request/response chain + * identified by the Request-URI. This method allows the client to + * determine the options and/or requirements associated with a resource, + * or the capabilities of a server, without implying a resource action + * or initiating a resource retrieval. + * </blockquote> + * </p> * * @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a> * @author <a href="mailto:[EMAIL PROTECTED]">Mike Bowler</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Jeff Dever</a> * + * @version $Revision$ * @since 1.0 */ public class OptionsMethod 1.37 +18 -21 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/PostMethod.java Index: PostMethod.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/PostMethod.java,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- PostMethod.java 1 Feb 2003 06:46:10 -0000 1.36 +++ PostMethod.java 2 Feb 2003 04:30:13 -0000 1.37 @@ -78,32 +78,25 @@ import org.apache.commons.logging.LogFactory; /** - * POST Method. This class encapsulates the HTTP POST specification. According - * to <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>: + * Implements the HTTP POST specification. + * <p> + * The HTTP POST method is defined in section 8.3 of + * <a href="http://www.ietf.org/rfc/rfc1945.txt">RFC1945</a>: * <blockquote> * The POST method is used to request that the origin server accept the entity * enclosed in the request as a new subordinate of the resource identified by * the Request-URI in the Request-Line. POST is designed to allow a uniform * method to cover the following functions: - * * <ul> - * <li> - * Annotation of existing resources; - * </li> - * <li> - * Posting a message to a bulletin board, newsgroup, mailing list, or similar - * group of articles; - * </li> - * <li> - * Providing a block of data, such as the result of submitting a form, to a - * data-handling process; - * </li> - * <li> - * Extending a database through an append operation. - * </li> + * <li>Annotation of existing resources</li> + * <li>Posting a message to a bulletin board, newsgroup, mailing list, or + * similar group of articles</li> + * <li>Providing a block of data, such as the result of submitting a form, + * to a data-handling process</li> + * <li>Extending a database through an append operation</li> * </ul> - * * </blockquote> + * </p> * * @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a> * @author <a href="mailto:[EMAIL PROTECTED]">Doug Sale</a> @@ -111,6 +104,8 @@ * @author Ortwin Glück * @author <a href="mailto:[EMAIL PROTECTED]">Mike Bowler</a> * @author <a href="mailto:[EMAIL PROTECTED]">Oleg Kalnichevski</a> + * + * @version $Revision$ * @since 1.0 */ public class PostMethod extends EntityEnclosingMethod { @@ -167,6 +162,7 @@ * @param uri either an absolute or relative URI * @param tempDir directory to store temp files in * + * @deprecated the client is responsible for disk I/O * @since 1.0 */ public PostMethod(String uri, String tempDir) { @@ -180,6 +176,7 @@ * @param tempDir directory to store temp files in * @param tempFile file to store temporary data in * + * @deprecated the client is responsible for disk I/O * @since 1.0 */ public PostMethod(String uri, String tempDir, String tempFile) { 1.23 +17 -7 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/PutMethod.java Index: PutMethod.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/PutMethod.java,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- PutMethod.java 1 Feb 2003 06:46:10 -0000 1.22 +++ PutMethod.java 2 Feb 2003 04:30:13 -0000 1.23 @@ -64,19 +64,29 @@ package org.apache.commons.httpclient.methods; /** - * PUT Method. - * + * Implements the HTTP PUT specification. + * <p> + * The HTTP PUT method is defined in section 9.6 of + * <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>: + * <blockquote> + * The PUT method requests that the enclosed entity be stored under the + * supplied Request-URI. If the Request-URI refers to an already + * existing resource, the enclosed entity SHOULD be considered as a + * modified version of the one residing on the origin server. + * </blockquote> + * </p> + * * @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a> * @author <a href="mailto:[EMAIL PROTECTED]">Mike Bowler</a> * @author <a href="mailto:[EMAIL PROTECTED]">Oleg Kalnichevski</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Jeff Dever</a> * + * @version $Revision$ * @since 1.0 */ public class PutMethod extends EntityEnclosingMethod { - // ----------------------------------------------------------- Constructors - /** * No-arg constructor. 1.11 +18 -11 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/TraceMethod.java Index: TraceMethod.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/TraceMethod.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- TraceMethod.java 30 Jan 2003 05:01:55 -0000 1.10 +++ TraceMethod.java 2 Feb 2003 04:30:13 -0000 1.11 @@ -68,19 +68,26 @@ import org.apache.commons.logging.LogFactory; /** - * - * TRACE method. - * - * @see DeleteMethod - * @see GetMethod - * @see HeadMethod - * @see OptionsMethod - * @see PostMethod - * @see PutMethod - * + * Implements the HTTP TRACE specification. + * <p> + * The HTTP TRACE method is defined in section 9.6 of + * <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>: + * <blockquote> + * The TRACE method is used to invoke a remote, application-layer loop- + * back of the request message. The final recipient of the request + * SHOULD reflect the message received back to the client as the + * entity-body of a 200 (OK) response. The final recipient is either the + * origin server or the first proxy or gateway to receive a Max-Forwards + * value of zero (0) in the request (see section 14.31). A TRACE request + * MUST NOT include an entity. + * </blockquote> + * </p> + * * @author Sean C. Sullivan * @author <a href="mailto:[EMAIL PROTECTED]">Mike Bowler</a> - * + * @author <a href="mailto:[EMAIL PROTECTED]">Jeff Dever</a> + * + * @version $Revision$ * @since 2.0 * */
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]