作家
登录

Node.js中遇到含空格URL的神奇“Bug”——小范围深入HTTP协议

作者: 来源: 2017-12-15 09:08:24 阅读 我要评论

, 1000, function() { 
  •   var parser = new HTTPParser(HTTPParser.REQUEST); 
  •  
  •   ... 
  •  
  •   parser[kOnHeaders] = parserOnHeaders; 
  •   parser[kOnHeadersComplete] = parserOnHeadersComplete; 
  •   parser[kOnBody] = parserOnBody; 
  •   parser[kOnMessageComplete] = parserOnMessageComplete; 
  •   parser[kOnExecute] = null
  •  
  •   return parser; 
  • }); 
  • 这么一来,链路就比较了了了:

    请求进来的时刻,Server 对象会为该次请求的 Socket 分派一个 HttpParser 对象,并调用其 execute() 函数进行解析,在解析完成后调用>

  • const binding = process.binding('http_parser'); 
  • const { methods, HTTPParser } = binding; 
  • 至于为什么 const binding = process.binding('http_parser') 就是对应到 src/node_http_parser.cc 文件,以及这一末节中下面的一些 C++ 源码相干分析,不明白且有兴趣的童鞋可自行去浏览更深一层的源码,或者网上搜刮谜底,或者我提前无耻硬广一下我将近上市的书《Node.js:来一打 C++ 扩大》——琅绫擎也有解释,以及我的有一场知乎 Live《深刻懂得 Node.js 包与模块机制》。

    1. env->SetProtoMethod(t, "close", Parser::Close); 
    2. env->SetProtoMethod(t, "execute", Parser::Execute); 
    3. env->SetProtoMethod(t, "finish", Parser::Finish); 
    4. env->SetProtoMethod(t, "reinitialize", Parser::Reinitialize); 
    5. env->SetProtoMethod(t, "pause", Parser::Pause<true>); 
    6. env->SetProtoMethod(t, "resume", Parser::Pause<false>); 
    7. env->SetProtoMethod(t, "consume", Parser::Consume); 
    8. env->SetProtoMethod(t, "unconsume", Parser::Unconsume); 
    9. env->SetProtoMethod(t, "getCurrentBuffer", Parser::GetCurrentBuffer); 

    如代码片段所示,前文中 parser.execute() 所对应的函数就是 Parser::Execute() 了。

    1. class Parser : public AsyncWrap { 
    2.   ... 
    3.  
    4.   static void Execute(const FunctionCallbackInfo<Value>& args) { 
    5.     Parser* parser; 
    6.     ... 
    7.  
    8.     Local<Object> buffer_obj = args[0].As<Object>(); 
    9.     char* buffer_data = Buffer::Data(buffer_obj); 
    10.     size_t buffer_len = Buffer::Length(buffer_obj); 
    11.  
    12.     ... 
    13.  
    14.     Local<Value> ret = parser->

        推荐阅读

        黑客最无奈的渗透办法,人人都会的暴力破解

      黑客在渗入渗出一个网站时,受制于本身的黑客才能以及小我思维宽度,在想尽了一切办法后,却一无所得,最终就不得不走上了暴力破解这一条陆辜暴力破解的道理就是穷举法,其根本思惟是根据标题标部分前提>>>详细阅读


      本文标题:Node.js中遇到含空格URL的神奇“Bug”——小范围深入HTTP协议

      地址:http://www.17bianji.com/lsqh/39781.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)