* released 1.1.14
* added "postonly" cookie mode
diff --git a/doc/haproxy.txt b/doc/haproxy.txt
index 23c2a0e..b9b0aee 100644
--- a/doc/haproxy.txt
+++ b/doc/haproxy.txt
@@ -1,9 +1,9 @@
 
          		     H A - P r o x y
          		     ---------------
-         		      version 1.1.11
+         		      version 1.1.14
 			      willy tarreau
-			       2002/06/11
+			       2002/07/20
 
 ================
 | Introduction |
@@ -483,6 +483,11 @@
 
 	cookie SERVERID insert nocache
 
+Pour insérer un cookie seulement suite aux requêtes de type POST, ajouter le mot
+clé 'postonly' après 'insert' :
+
+	cookie SERVERID insert postonly
+
 
 Remarques :
 -----------
@@ -497,6 +502,11 @@
   le cas contraire, un cache HTTP 1.0 pourrait cacher la réponse, incluant le
   cookie de persistence inséré, donc provoquer des changements de serveurs pour
   des clients partageant le même cache.
+- lorsque l'application est bien connue, et que les parties nécessitant de la
+  persistence sont systématiquement accédées par un formulaire en mode POST,
+  il est plus efficace encore de combiner le mot clé "postonly" avec "insert"
+  et "indirect", car la page d'accueil reste cachable, et c'est l'application
+  qui gère le 'cache-control'.
 
 2.10) Assignation d'un serveur à une valeur de cookie
 ----------------------------------------------------
diff --git a/haproxy.c b/haproxy.c
index 5891661..2ec3e6d 100644
--- a/haproxy.c
+++ b/haproxy.c
@@ -14,12 +14,15 @@
  *     the snprintf() bug since requests we simple (GET / HTTP/1.0).
  *   - cookie in insert+indirect mode sometimes segfaults !
  *   - a proxy with an invalid config will prevent the startup even if disabled.
+ *   - it may be nice to return HTTP 502 when a server returns no header nor data.
  *
  * ChangeLog :
  *
+ * 2002/07/20 : 1.1.14
+ *   - added "postonly" cookie mode
  * 2002/07/15 : 1.1.13
  *   - tv_diff used inverted parameters which led to negative times !
-  * 2002/07/13 : 1.1.12
+ * 2002/07/13 : 1.1.12
  *   - fixed stats monitoring, and optimized some tv_* for most common cases.
  *   - replaced temporary 'newhdr' with 'trash' to reduce stack size
  *   - made HTTP errors more HTML-fiendly.
@@ -170,8 +173,8 @@
 #include <linux/netfilter_ipv4.h>
 #endif
 
-#define HAPROXY_VERSION "1.1.13"
-#define HAPROXY_DATE	"2002/07/15"
+#define HAPROXY_VERSION "1.1.14"
+#define HAPROXY_DATE	"2002/07/20"
 
 /* this is for libc5 for example */
 #ifndef TCP_NODELAY
@@ -335,6 +338,7 @@
 #define	PR_O_BIND_SRC	256	/* bind to a specific source address when connect()ing */
 #define PR_O_NULLNOLOG	512	/* a connect without request will not be logged */
 #define PR_O_COOK_NOC	1024	/* add a 'Cache-control' header with the cookie */
+#define PR_O_COOK_POST	2048	/* don't insert cookies for requests other than a POST */
 
 
 /* various session flags */
@@ -343,6 +347,7 @@
 #define SN_CLALLOW	4	/* a client header matches an allow regex */
 #define SN_SVDENY	8	/* a server header matches a deny regex */
 #define SN_SVALLOW	16	/* a server header matches an allow regex */
+#define	SN_POST		32	/* the request was an HTTP POST */
 
 /* different possible states for the client side */
 #define CL_STHEADERS	0
@@ -2233,6 +2238,9 @@
 		    buffer_replace2(req, req->h, req->h, trash, len);
 		}
 
+		if (!memcmp(req->data, "POST ", 5))
+		    t->flags |= SN_POST; /* this is a POST request */
+		    
 		t->cli_state = CL_STDATA;
 		req->rlim = req->data + BUFSIZE; /* no more rewrite needed */
 
@@ -2779,9 +2787,11 @@
 		/* we can only get here after an end of headers */
 		/* we'll have something else to do here : add new headers ... */
 
-		if ((t->srv) && !(t->flags & SN_DIRECT) && (t->proxy->options & PR_O_COOK_INS)) {
+		if ((t->srv) && !(t->flags & SN_DIRECT) && (t->proxy->options & PR_O_COOK_INS) &&
+		    (!(t->proxy->options & PR_O_COOK_POST) || (t->flags & SN_POST))) {
 		    /* the server is known, it's not the one the client requested, we have to
-		     * insert a set-cookie here.
+		     * insert a set-cookie here, except if we want to insert only on POST
+		     * requests and this one isn't.
 		     */
 		    len = sprintf(trash, "Set-Cookie: %s=%s; path=/\r\n",
 				  t->proxy->cookie_name, t->srv->cookie);
@@ -2794,7 +2804,7 @@
 		    if (t->proxy->options & PR_O_COOK_NOC)
 			//len += sprintf(newhdr + len, "Cache-control: no-cache=\"set-cookie\"\r\n");
 			len += sprintf(trash + len, "Cache-control: private\r\n");
-
+		    
 		    buffer_replace2(rep, rep->h, rep->h, trash, len);
 		}
 
@@ -2987,6 +2997,8 @@
 	    tv_eternity(&t->swexpire);
 	    fd_delete(t->srv_fd);
 	    t->srv_state = SV_STCLOSE;
+	    t->logs.status = 502;
+	    client_return(t, strlen(HTTP_502), HTTP_502);
 	    return 1;
 	}
 	/* read timeout, last read, or end of client write
@@ -3878,8 +3890,11 @@
 	    else if (!strcmp(args[cur_arg], "nocache")) {
 		curproxy->options |= PR_O_COOK_NOC;
 	    }
+	    else if (!strcmp(args[cur_arg], "postonly")) {
+		curproxy->options |= PR_O_COOK_POST;
+	    }
 	    else {
-		Alert("parsing [%s:%d] : <cookie> supports 'rewrite', 'insert' and 'indirect' options.\n",
+		Alert("parsing [%s:%d] : <cookie> supports 'rewrite', 'insert', 'indirect', 'nocache' and 'postonly' options.\n",
 		      file, linenum);
 		return -1;
 	    }