-
Notifications
You must be signed in to change notification settings - Fork 30k
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
http: switch default parser to llhttp #24870
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,6 @@ | ||
#include "inspector_socket.h" | ||
|
||
#ifdef NODE_EXPERIMENTAL_HTTP_DEFAULT | ||
#define NODE_EXPERIMENTAL_HTTP | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Where is this value There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It’s consumed in I agree that the original name was not a great choice, but I am not sure that it would be worth the churn of renaming – if you feel strongly about it, you can feel free to push a new commit to this PR or open a new one afterwards? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sure! |
||
#endif | ||
#include "http_parser_adaptor.h" | ||
|
||
#include "util-inl.h" | ||
|
@@ -437,13 +435,8 @@ class HttpHandler : public ProtocolHandler { | |
explicit HttpHandler(InspectorSocket* inspector, TcpHolder::Pointer tcp) | ||
: ProtocolHandler(inspector, std::move(tcp)), | ||
parsing_value_(false) { | ||
#ifdef NODE_EXPERIMENTAL_HTTP_DEFAULT | ||
llhttp_init(&parser_, HTTP_REQUEST, &parser_settings); | ||
llhttp_settings_init(&parser_settings); | ||
#else /* !NODE_EXPERIMENTAL_HTTP_DEFAULT */ | ||
http_parser_init(&parser_, HTTP_REQUEST); | ||
http_parser_settings_init(&parser_settings); | ||
#endif /* NODE_EXPERIMENTAL_HTTP_DEFAULT */ | ||
parser_settings.on_header_field = OnHeaderField; | ||
parser_settings.on_header_value = OnHeaderValue; | ||
parser_settings.on_message_complete = OnMessageComplete; | ||
|
@@ -488,17 +481,12 @@ class HttpHandler : public ProtocolHandler { | |
|
||
void OnData(std::vector<char>* data) override { | ||
parser_errno_t err; | ||
#ifdef NODE_EXPERIMENTAL_HTTP_DEFAULT | ||
err = llhttp_execute(&parser_, data->data(), data->size()); | ||
|
||
if (err == HPE_PAUSED_UPGRADE) { | ||
err = HPE_OK; | ||
llhttp_resume_after_upgrade(&parser_); | ||
} | ||
#else /* !NODE_EXPERIMENTAL_HTTP_DEFAULT */ | ||
http_parser_execute(&parser_, &parser_settings, data->data(), data->size()); | ||
err = HTTP_PARSER_ERRNO(&parser_); | ||
#endif /* NODE_EXPERIMENTAL_HTTP_DEFAULT */ | ||
data->clear(); | ||
if (err != HPE_OK) { | ||
CancelHandshake(); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also happy to remove this completely if that’s preferred.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we are going to land this patch fairly soon (before April), it's probably easier if we simply flip the default value of the build time switch but do not actually remove it, and postpone the actual removal of the code until we have more usage in the wild.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@joyeecheung The thing is … is there a way to flip the default value here? How do we do that? I assume we could introduce a new flag
--no-experimental-http-parser
or so, but that seems … idk?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does adding
default=True
here work? (From what I can tell it should do the trick?)Also I just notice that we have a bunch of '--shared-http-parser*` flags below, should we change the help text of them as well? (They should be practically turned into noops by this patch since the library is not actually used?)EDIT: oh, nvm, they still work if you use the runtime switch..There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@joyeecheung That would leave us with no way to turn it off (at build time), right? So it’s the same as making this a no-op?