-
-
Notifications
You must be signed in to change notification settings - Fork 33.8k
Open
Labels
httpIssues or PRs related to the http subsystem.Issues or PRs related to the http subsystem.http2Issues or PRs related to the http2 subsystem.Issues or PRs related to the http2 subsystem.httpsIssues or PRs related to the https subsystem.Issues or PRs related to the https subsystem.
Description
Thanks to the efforts of making the compatibility API, differences between http[s] and http2 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 for http[s](e.g. expressjs/express#3730).
In order to expose the differences, I've been translating test cases for http[s] to test cases for http2 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.Http2ServerRequestdoes not havereq.connection.bytesWritten. test:parallel/test-http-byteswritten.js,parallel/test-https-byteswritten.js - If
http2.Http2ServerRequest.pauseis called,http2.Http2ServerRequest.socketnever emit 'data' event. test:parallel/test-http-dump-req-when-res-ends.js -
http2.Http2ServerResponse.writeHeadwith 'HTTP/1 Connection specific headers'(e.g. "Transfer-Encoding":"chunked") causes error:ERR_HTTP2_INVALID_CONNECTION_HEADERS. test:parallel/test-http-head-request.js -
http2.Http2ServerResponsedoes not haveres.writeProcessing. test:parallel/test-http-information-processing.js -
http2.Http2ServerResponse.writeHeadwith a spaced header name does not cause error. test:parallel/test-http-invalidheaderfield.js -
http2.Http2ServerRequestdoes not havereq.connection.parser. test:parallel/test-http-highwatermark.js,parallel/test-http-server-keepalive-end.js -
http2.Http2ServerResponse.endcalls callback before satisfying condition of 'finish' events. test:parallel/test-http-outgoing-finish.js -
http2.Http2ServerResponse.getHeadersreturns headers which is not initialized byObject.create(null)
test:parallel/test-http-mutable-headers.js -
http2.Http2ServerResponsedoes not haveres.writableHighWaterMark. test:parallel/test-http-outgoing-properties.js related issue:http: OutgoingMessage streamlike #28969 -
http2.Http2ServerResponsedoes not haveres.writableLength. test:parallel/test-http-outgoing-properties.js related issue:http: OutgoingMessage streamlike #28969 -
http2.Http2ServerResponsedoes not haveres.writableFinished. test:parallel/test-http-outgoing-writableFinished.js related issue:http2 compat missing writableFinished #29230 -
http2.Http2ServerRequest.headersreturns headers which is initialized byObject.create(null)
test:parallel/test-http-raw-headers.js -
http2.Http2ServerResponse.removeHeadercannot remove a header nodejs automatically adds(e.g. 'date'). test:parallel/test-http-remove-header-stays-removed.js -
http2.Http2ServerResponse.writeafterhttp2.Http2ServerResponse.endreturnsfalse. test:parallel/test-http-res-write-after-end.js -
http2.Http2ServerResponse.writeafterhttp2.Http2ServerResponse.enddoes 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 #30964 -
http2.Http2ServerResponse.writewith array input does not cause an error. test:parallel/test-http-res-write-after-end.js -
http2.Http2ServerResponse.endwith array input does not cause an error. test:parallel/test-http-res-write-after-end.js -
http2.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.js -
http2.Http2ServerResponse.setHeaderandhttp2.Http2ServerResponse.writeHeadwith multiple value of 'content-length' causes an error. test:parallel/test-http-response-multi-content-length.js -
http2.Http2ServerResponse.setHeaderandhttp2.Http2ServerResponse.writeHeadwith multiple value of 'content-type' or other headers expected single value causes an error. test:parallel/test-http-response-multiheaders.js -
http2.Http2ServerResponse.writeHeadwith invalid character does not cause error. test:parallel/test-http-response-splitting.js -
http2.Http2ServerResponsesending 'Trailer' header without 'transfer encoding: chunked' does not cause error. test:parallel/test-http-server-de-chunked-trailer.js -
http2.Http2ServerResponse.writeHeadcannot set multiple value of header with nested array. test:parallel/test-http-set-cookies.js -
http2.Http2ServerResponse.setTimeoutdoes not pass a socket to cb function. test:parallel/test-http-set-timeout-server.js -
http2.Http2ServerResponse.writeHeadwith invalid status message does not cause an error. test:parallel/test-http-status-reason-invalid-chars.js -
stream.pipe(http2.Http2ServerResponse)eventually emmits both 'finish' and 'close' events. test:parallel/test-http-writable-true-after-close.js -
http2.Http2ServerResponse.enddoes not execute callback whenhttp2.Http2ServerResponse.endhas already been called. test:parallel/test-http-outgoing-end-multiple.js related PR:[x] http2: compat ERR_STREAM_ALREADY_FINISHED #29229 - After
http2.Http2ServerRequest.connection.setTimeoutis called, 'timeout' event is not emitted. test:parallel/test-http-set-timeout.js -
http2.Http2ServerResponse.finishedturn true without callingend.
http2: make compat finished match http/1 #24347 -
http2.Http2ServerResponse.writethrow err when connection is invalid. http1 do nothing then.
HTTP2 compatibility layer issues with invalid streams #29529 - compat mode
http2.Http2Serveremitserrorwhen a connection is unexpectedly closed. In that case,http1.Serveremitsaborted. http2: sessionError vs aborted #28267 -
http2.Http2ServerResponse.write(data)afterhttp2.Http2ServerResponse.writeHead()
with status 304 or 204 cause error. Fix usage of undocumented _implicitHeader expressjs/compression#128 (comment)
qdevial, GaryGSC, GrosSacASac, gespispace, aphix and 14 moreaddaleax, rexagod, puzpuzpuz, ulrichb, devsumanmdn and 2 moreTriBuiQuang
Metadata
Metadata
Assignees
Labels
httpIssues or PRs related to the http subsystem.Issues or PRs related to the http subsystem.http2Issues or PRs related to the http2 subsystem.Issues or PRs related to the http2 subsystem.httpsIssues or PRs related to the https subsystem.Issues or PRs related to the https subsystem.