-
Notifications
You must be signed in to change notification settings - Fork 29.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
The differences between http2 compatibility API and http[s] #29829
Comments
I think you can add #24347 to the list as well. |
Really good work! I would be interested in helping sorting some of this. |
Here is another one that might be worth to add to the list, #29529 |
@ronag Thank you for looking at this issue. I added 2 issues you mentioned. I'm glad to make pull request to put my tests at this repo if it is OK. |
@sogaani: Just wanted to give a quick ping that I'm still interested in helping sorting these out over time (a little swamped at the moment). But please do continue updating the list if you find more differences. |
@ronag Thank you for mentioning the difference. I added :) |
@rexagod: If you are looking for tasks there is plenty to pick from here. |
Awesome! Thank you for pointing me here, @ronag! |
Isn't the 102 status code is totally deprecated and will not be added to HTTP/2 standard? |
Thanks to the efforts of making the compatibility API, differences between
http[s]
andhttp2
modules seldom annoy developers.But, some http2 compatibility API still behaves differently and lacks some APIs from
http[s]
and it causes breakages to ecosystems forhttp[s]
(e.g. expressjs/express#3730).In order to expose the differences, I've been translating test cases for
http[s]
to test cases forhttp2
at my repo. The following is a list of the differences currently founded by translated test cases.I'm not sure all the differences have to be fixed. I thought if they should not be fixed, documenting the differences is good for the developer.
Differences between http and http2 compatibility API
http2.Http2ServerRequest
does not havereq.connection.bytesWritten
. test:parallel/test-http-byteswritten.js,parallel/test-https-byteswritten.jshttp2.Http2ServerRequest.pause
is called,http2.Http2ServerRequest.socket
never emit 'data' event. test:parallel/test-http-dump-req-when-res-ends.jshttp2.Http2ServerResponse.writeHead
with 'HTTP/1 Connection specific headers'(e.g. "Transfer-Encoding":"chunked") causes error:ERR_HTTP2_INVALID_CONNECTION_HEADERS. test:parallel/test-http-head-request.jshttp2.Http2ServerResponse
does not haveres.writeProcessing
. test:parallel/test-http-information-processing.jshttp2.Http2ServerResponse.writeHead
with a spaced header name does not cause error. test:parallel/test-http-invalidheaderfield.jshttp2.Http2ServerRequest
does not havereq.connection.parser
. test:parallel/test-http-highwatermark.js,parallel/test-http-server-keepalive-end.jshttp2.Http2ServerResponse.end
calls callback before satisfying condition of 'finish' events. test:parallel/test-http-outgoing-finish.jshttp2.Http2ServerResponse.getHeaders
returns headers which is not initialized byObject.create(null)
test:parallel/test-http-mutable-headers.js
http2.Http2ServerResponse
does not haveres.writableHighWaterMark
. test:parallel/test-http-outgoing-properties.js related issue:http: OutgoingMessage streamlike #28969http2.Http2ServerResponse
does not haveres.writableLength
. test:parallel/test-http-outgoing-properties.js related issue:http: OutgoingMessage streamlike #28969http2.Http2ServerResponse
does not haveres.writableFinished
. test:parallel/test-http-outgoing-writableFinished.js related issue:http2 compat missing writableFinished #29230http2.Http2ServerRequest.headers
returns headers which is initialized byObject.create(null)
test:parallel/test-http-raw-headers.js
http2.Http2ServerResponse.removeHeader
cannot remove a header nodejs automatically adds(e.g. 'date'). test:parallel/test-http-remove-header-stays-removed.jshttp2.Http2ServerResponse.write
afterhttp2.Http2ServerResponse.end
returnsfalse
. test:parallel/test-http-res-write-after-end.jshttp2.Http2ServerResponse.write
afterhttp2.Http2ServerResponse.end
does not emmit 'error'. test:parallel/test-http-res-write-after-end.js,parallel/test-http-server-write-after-end.js Fixed by http2: make http2/compat.write more http/1 compliant #30964http2.Http2ServerResponse.write
with array input does not cause an error. test:parallel/test-http-res-write-after-end.jshttp2.Http2ServerResponse.end
with array input does not cause an error. test:parallel/test-http-res-write-after-end.jshttp2.Http2ServerResponse
's error code start with 'ERR_HTTP2'. test:parallel/test-http-response-add-header-after-sent.js,parallel/test-http-response-remove-header-after-sent.js,parallel/test-http-response-statuscode.js,parallel/test-http-write-head.jshttp2.Http2ServerResponse.setHeader
andhttp2.Http2ServerResponse.writeHead
with multiple value of 'content-length' causes an error. test:parallel/test-http-response-multi-content-length.jshttp2.Http2ServerResponse.setHeader
andhttp2.Http2ServerResponse.writeHead
with multiple value of 'content-type' or other headers expected single value causes an error. test:parallel/test-http-response-multiheaders.jshttp2.Http2ServerResponse.writeHead
with invalid character does not cause error. test:parallel/test-http-response-splitting.jshttp2.Http2ServerResponse
sending 'Trailer' header without 'transfer encoding: chunked' does not cause error. test:parallel/test-http-server-de-chunked-trailer.jshttp2.Http2ServerResponse.writeHead
cannot set multiple value of header with nested array. test:parallel/test-http-set-cookies.jshttp2.Http2ServerResponse.setTimeout
does not pass a socket to cb function. test:parallel/test-http-set-timeout-server.jshttp2.Http2ServerResponse.writeHead
with invalid status message does not cause an error. test:parallel/test-http-status-reason-invalid-chars.jsstream.pipe(http2.Http2ServerResponse)
eventually emmits both 'finish' and 'close' events. test:parallel/test-http-writable-true-after-close.jshttp2.Http2ServerResponse.end
does not execute callback whenhttp2.Http2ServerResponse.end
has already been called. test:parallel/test-http-outgoing-end-multiple.js related PR:[x] http2: compat ERR_STREAM_ALREADY_FINISHED #29229http2.Http2ServerRequest.connection.setTimeout
is called, 'timeout' event is not emitted. test:parallel/test-http-set-timeout.jshttp2.Http2ServerResponse.finished
turn true without callingend
.http2: make compat finished match http/1 #24347
http2.Http2ServerResponse.write
throw err when connection is invalid. http1 do nothing then.HTTP2 compatibility layer issues with invalid streams #29529
http2.Http2Server
emitserror
when a connection is unexpectedly closed. In that case,http1.Server
emitsaborted
. http2: sessionError vs aborted #28267http2.Http2ServerResponse.write(data)
afterhttp2.Http2ServerResponse.writeHead()
with status 304 or 204 cause error. Fix usage of undocumented _implicitHeader expressjs/compression#128 (comment)
The text was updated successfully, but these errors were encountered: