diff --git a/apps/ocsp.c b/apps/ocsp.c
index 902546f..8ba21a5 100644
--- a/apps/ocsp.c
+++ b/apps/ocsp.c
@@ -1268,10 +1268,12 @@ static BIO *init_responder(const char *port)
 static int do_responder(OCSP_REQUEST **preq, BIO **pcbio, BIO *acbio,
 			const char *port)
 	{
-	int have_post = 0, len;
+	int len;
 	OCSP_REQUEST *req = NULL;
 	char inbuf[1024];
+	char *p;
 	BIO *cbio = NULL;
+	BIO *getbio = NULL;
 
 	if (BIO_do_accept(acbio) <= 0)
 		{
@@ -1283,29 +1285,39 @@ static int do_responder(OCSP_REQUEST **preq, BIO **pcbio, BIO *acbio,
 	cbio = BIO_pop(acbio);
 	*pcbio = cbio;
 
+	/* Read the request line. */
+	len = BIO_gets(cbio, inbuf, sizeof inbuf);
+	if (len <= 0)
+		return 1;
+	if (strncmp(inbuf, "GET", 3) == 0)
+		{
+		for (p = inbuf + 3; *p == ' ' || *p == '\t'; ++p)
+			continue;
+		getbio = BIO_new_mem_buf(p, -1);
+		}
+	else if (!strncmp(inbuf, "POST", 4))
+		{
+		BIO_printf(bio_err, "Invalid request\n");
+		return 1;
+		}
 	for(;;)
 		{
 		len = BIO_gets(cbio, inbuf, sizeof inbuf);
 		if (len <= 0)
 			return 1;
-		/* Look for "POST" signalling start of query */
-		if (!have_post)
-			{
-			if(strncmp(inbuf, "POST", 4))
-				{
-				BIO_printf(bio_err, "Invalid request\n");
-				return 1;
-				}
-			have_post = 1;
-			}
 		/* Look for end of headers */
 		if ((inbuf[0] == '\r') || (inbuf[0] == '\n'))
 			break;
 		}
 
 	/* Try to read OCSP request */
-
-	req = d2i_OCSP_REQUEST_bio(cbio, NULL);
+	if (getbio)
+		{
+		req = d2i_OCSP_REQUEST_bio(getbio, NULL);
+		BIO_free(getbio);
+		}
+	else
+		req = d2i_OCSP_REQUEST_bio(cbio, NULL);
 
 	if (!req)
 		{
