这么一来,链路就比较了了了:
请求进来的时刻,Server 对象会为该次请求的 Socket 分派一个 HttpParser 对象,并调用其 execute() 函数进行解析,在解析完成后调用>
至于为什么 const binding = process.binding('http_parser') 就是对应到 src/node_http_parser.cc 文件,以及这一末节中下面的一些 C++ 源码相干分析,不明白且有兴趣的童鞋可自行去浏览更深一层的源码,或者网上搜刮谜底,或者我提前无耻硬广一下我将近上市的书《Node.js:来一打 C++ 扩大》——琅绫擎也有解释,以及我的有一场知乎 Live《深刻懂得 Node.js 包与模块机制》。
- env->SetProtoMethod(t, "close", Parser::Close);
- env->SetProtoMethod(t, "execute", Parser::Execute);
- env->SetProtoMethod(t, "finish", Parser::Finish);
- env->SetProtoMethod(t, "reinitialize", Parser::Reinitialize);
- env->SetProtoMethod(t, "pause", Parser::Pause<true>);
- env->SetProtoMethod(t, "resume", Parser::Pause<false>);
- env->SetProtoMethod(t, "consume", Parser::Consume);
- env->SetProtoMethod(t, "unconsume", Parser::Unconsume);
- env->SetProtoMethod(t, "getCurrentBuffer", Parser::GetCurrentBuffer);
如代码片段所示,前文中 parser.execute() 所对应的函数就是 Parser::Execute() 了。
- class Parser : public AsyncWrap {
- ...
- static void Execute(const FunctionCallbackInfo<Value>& args) {
- Parser* parser;
- ...
- Local<Object> buffer_obj = args[0].As<Object>();
- char* buffer_data = Buffer::Data(buffer_obj);
- size_t buffer_len = Buffer::Length(buffer_obj);
- ...
- Local<Value> ret = parser->
推荐阅读
黑客在渗入渗出一个网站时,受制于本身的黑客才能以及小我思维宽度,在想尽了一切办法后,却一无所得,最终就不得不走上了暴力破解这一条陆辜暴力破解的道理就是穷举法,其根本思惟是根据标题标部分前提>>>详细阅读
本文标题:Node.js中遇到含空格URL的神奇“Bug”——小范围深入HTTP协议
地址:http://www.17bianji.com/lsqh/39781.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示