I could use some help with this one - I took a big leap with enabling
http/2 support and I got knocked back really quick. There seems to be an
issue with POSTs and it seems to be more pronounced with ios devices (as
much as you can trust user agents) but there were some non-ios devices
that
seemed to be having issues also. Unfortunately I had to pull the changes
quickly so I didn’t get to capture too much debugging information (plus
all
the connections were via tls 1.2 w/ diffie-hellman so even if I had
quickly
taken a packet dump I wouldn’t have been able to decrypt it).
So I built a version of curl with http/2 support to try and reproduce:
I did a test POST request with http/1 and I got a 200 response.
I did the same POST request via http/2 and the tls handshake completed
but
the connection was closed shortly thereafter. The error I see in the log
file is “client sent stream with data before settings were acknowledged
while processing HTTP/2 connection” I see other references to this error
on
POST requests when I googled for it, but I didn’t see a solution. This
sounds like an interoperability issue but I’d be shocked if I’m the
first
one to find something like that.
This is also different then the errors I was seeing earlier in the week
in those cases it looked like nginx as receiving the POST requests via
http/2, and forwarding to an HAProxy upstream via http/1.1. From there
the
requests were dispatched to servers, also via http/1.1. One set of
backend
servers seemed to be getting duplicate requests (but only of requests
that
originated as HTTP/2 POSTs) and the other set running a java service
seemed
to dislike the content received and they were closing the connections.
I’m
still trying to reproduce those transactions in a dev environment w/
diffie-hellman disabled so I can get a packet capture and get a better
idea
of what is happening.
file is “client sent stream with data before settings were acknowledged
while processing HTTP/2 connection” I see other references to this error on
POST requests when I googled for it, but I didn’t see a solution. This
sounds like an interoperability issue but I’d be shocked if I’m the first
one to find something like that.
I finally had a chance to test this, I applied ce94f07d5082 to the
1.9.15
code – it applied cleanly and compiled cleanly. However, my test post
request over http2 with curl failed with the same “client sent stream
with
data before settings were acknowledged while processing HTTP/2
connection”
error. Are there other changes in 1.11.x that I might need? Do I need to
explicitly enable the preread functionality? It looked to me as-if it
was
enabled by default.
The error does seem to be 100% reproducible, the command I am running
is:
I finally had a chance to test this, I applied ce94f07d5082 to the 1.9.15
code – it applied cleanly and compiled cleanly. However, my test post
request over http2 with curl failed with the same “client sent stream with
data before settings were acknowledged while processing HTTP/2 connection”
error. Are there other changes in 1.11.x that I might need? Do I need to
explicitly enable the preread functionality? It looked to me as-if it was
enabled by default.
The answer to both questions no, you don’t need. But it looks like
you’re
still running the old binary.
The error does seem to be 100% reproducible, the command I am running is:
You were correct, there was a typeo in my rpm spec that kept the diff
from
applying but didn’t kill the build. The curl request is working now! Now
I
need to see if those other POST requests are working.