Repository: quarkusio/quarkus
Issue: POST with HTTP/2 fails with: java.lang.IllegalStateException: Request has already been read

**Describe the bug**
A POST request over HTTP/2 fails with _java.lang.IllegalStateException: Request has already been read_. The request is not processed by the appropriate JAX-RS resource at all and instead a _400 Bad Request_ that contains the error message in its body.
The same request over HTTP/1 executes correctly.

**Expected behavior**
The requests should be executed in the same way regardless of the transport protocol.

**Actual behavior**
As described above.

**To Reproduce**
Steps to reproduce the behavior:
1. Make a simple Hello World application, the most basic one made by [the generator](https://code.quarkus.io/) with RESTEasy (included by default) is the good starting point.
2. Add the method for handling a POST request. It can be as simple as this:
```java
@POST
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
public String post(String body) {
    System.out.println(body);
    return "";
}
```
3. Build and run.
4. Send a POST request over HTTP/2, e.g.:
```
curl --http2-prior-knowledge -v -X POST -d Hello -H "Content-Type: text/plain" http://localhost:8080/hello
```
It does not matter if `--http2` or `--http2-prior-knowledge` is used. The result differs just in the protocol switching. Without `--http2` or `--http2-prior-knowledge` the command succeeds:

```
$ curl --http2-prior-knowledge -v -X POST -d Hello -H "Content-Type: text/plain" http://localhost:8080/hello
Note: Unnecessary use of -X or --request, POST is already inferred.
* Uses proxy env variable no_proxy == '192.168.99.100'
*   Trying ::1:8080...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x172c50)
> POST /hello HTTP/2
> Host: localhost:8080
> user-agent: curl/7.68.0
> accept: */*
> content-type: text/plain
> content-length: 5
>
* We are completely uploaded and fine
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 400
< content-length: 62
< content-type: text/html;charset=UTF-8
<
java.lang.IllegalStateException: Request has already been read* Connection #0 to host localhost left intact

$ curl -v -X POST -d Hello -H "Content-Type: text/plain" http://localhost:8080/hello
Note: Unnecessary use of -X or --request, POST is already inferred.
* Uses proxy env variable no_proxy == '192.168.99.100'
*   Trying ::1:8080...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> POST /hello HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.68.0
> Accept: */*
> Content-Type: text/plain
> Content-Length: 5
>
* upload completely sent off: 5 out of 5 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Length: 0
< Content-Type: text/plain;charset=UTF-8
<
* Connection #0 to host localhost left intact
```

Moreover it is interesting that a GET request executes successfully with both HTTP/1 and HTTP/2:

```
$ curl -v http://localhost:8080/hello
* Uses proxy env variable no_proxy == '192.168.99.100'
*   Trying ::1:8080...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /hello HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Length: 5
< Content-Type: text/plain;charset=UTF-8
<
hello* Connection #0 to host localhost left intact

$ curl -v --http2-prior-knowledge http://localhost:8080/hello
* Uses proxy env variable no_proxy == '192.168.99.100'
*   Trying ::1:8080...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0xa22a50)
> GET /hello HTTP/2
> Host: localhost:8080
> user-agent: curl/7.68.0
> accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 200
< content-length: 5
< content-type: text/plain;charset=UTF-8
<
hello* Connection #0 to host localhost left intact
```

**Configuration**
Using defaults.

**Environment (please complete the following information):**
 - Output of `uname -a` or `ver`:  Microsoft Windows [Version 6.1.7601]
 - Output of `java -version`: java 11.0.5 2019-10-15 LTS
 - Quarkus version or git rev: 1.2.0.Final


Changed files:
extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/VertxInputStream.java

diff --git a/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/VertxInputStream.java b/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/VertxInputStream.java
index 232a3aa9964..92f1bceb565 100644
--- a/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/VertxInputStream.java
+++ b/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/VertxInputStream.java
@@ -200,7 +200,7 @@ protected ByteBuf readBlocking() throws IOException {
                     if (input1 == null) {
                         request.fetch(1);
                     }
-                } else {
+                } else if (!eof) {
                     request.fetch(1);
                 }