网站运行收到类似如下的日志,而且还很多:
[2016-06-23 07:57:17][::ffff:123.56.77.64][NONE] [GET http://www.izhongsai.com/?t=1466639837014 - - 200] 5.280
请问这种日志怎么来的?为什么没有前缀 /?
而一般的日志格式至少应该是这样的:
[2016-06-23 09:15:35][80.82.78.38][NONE] [GET /cache/global/img/gs.gif - - 404] 88.300
系统使用的是nodejs搭配express,日志中间件为mogan。简单分析的原因是这种访问日志来源于系统内部,但又不确定来源于哪个部分,是否爬虫会带来这种奇妙的日志呢?
望了解这个问题的朋友解惑,谢谢!
找到答案了,参考
http://stackoverflow.com/questions/31626234/preventing-external-requests-expressjs/31695623#31695623
译下搬过来:
这个问题是可以通过连接到web服务器后模拟一个http格式的报文的形式重现。
假设web服务器运行在本地,如果在ubuntu下,可以使用netcat发送一个请求,如:
虽说这不是一个规则的http请求,nodejs还是能够正确的处理它,只是传到nodejs里面的url就不仅仅是包含一个路径,竟然特么的还包含协议和域名之类的东西!对于某些版本的node,express,就有可能会被它搞死!
至于为毛有些会返回200,这大概跟你的程序逻辑处理的方式有关了!
所以嘛,就不要再想当然的认为收到的请求的url(express中是originalUrl)会一定是以‘/’开头了,可能有些不仅仅不是‘/’开头,甚至连正确的协议和域名都没有!
在express中,不低于v4版本,好像已经解决了url不以‘/’开头的问题,但却没有修改和处理originalUrl,不管咋滴,还是不要认为url一定是以‘/’开头的。
解决这个问题还是比较简单滴,就像下面的例子一样,把它放在日志的插件前面,就不会被记进日志里面了!