Pre:
在APE(Auto-Pentest)的时候,借鉴了w13scan
的大部分代码.
里面发包探测都用到了requests
模块,时不时会出这种bug
1 | raise ValueError('Invalid header name %r' % (header,)) |
Debug:
请求了该url:https://www.gstatic.com/proc/meminfo
输出该请求的headers后
1 | {':authority': 'www.gstatic.com', 'sec-fetch-site': 'none', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36', 'accept-encoding': 'gzip, deflate, br'} |
发现header中有个参数多了个冒号.
原因:
goole了一下,参考了http中的header为什么有这些部分?冒号的是什么
发现原来这些请求是用了HTTP2
协议.而不是常见的HTTP1.1
HTTP2的简单介绍:
HTTP2 为什么要出现,又解决了HTTP1.1不能解决的什么事情呢?
简而言之就是
-
H2是一个二进制协议而,H1是超文本协议.传输的内容都不是一样的
-
H2遵循多路复用即,代替同一host下的内容,只建立一次连接. H1不是
-
H2可以使用HPACK进行头部的压缩,H1则不论什么请求都会发送
-
H2允许服务器,预先将网页所需要的资源PUSH到浏览器的内存当中.
解决办法:
思路1:
第一反应是看看requests
支不支持HTTP2,发现是不支持的.
Does python-requests support HTTP2 and asynchronous calls?
思路2:
HTTP2应该还不是很普及,那就只能简单粗暴的暂时把headers
中含冒号给替换成空字符.
或许应该在日志里把这类请求给记录下来,随便看看HTTP2用得多不多