使用nc命令获取HTTP响应时返回异常结果的技术问询
关于nc发送HTTP请求后出现
17b的解释与解决方法 嘿,别担心,你看到的这个17b可不是什么异常结果——这是HTTP/1.1里**分块传输编码(Chunked Transfer Encoding)**的正常表现!
为什么会出现17b?
当你用nc发送HTTP/1.1请求时,如果服务器无法提前确定响应体的总大小(或者主动选择分块传输),就会在响应头里返回Transfer-Encoding: chunked。这种传输方式会把响应体拆分成多个数据块,每个块的开头会先发送一个十六进制的数字,用来表示这个块的字节数,随后是回车换行,再跟上块的实际内容,最后又是回车换行。
你看到的17b就是十六进制的块大小,转换成十进制是379,意思是接下来的379字节是页面内容的一个数据块。等所有块发送完成后,服务器会发送一个0(表示没有更多块了)加上回车换行来结束响应。
如何得到“整洁”的响应内容?
如果你不想看到这些分块标记,有几种简单的方法:
用HTTP工具自动处理分块:直接使用
curl或者wget这类工具,它们会自动解析分块编码,把所有数据块拼接成完整的页面内容展示给你,比如执行:curl site.it改用HTTP/1.0请求:HTTP/1.0不支持分块传输编码,服务器会返回
Content-Length头并一次性发送完整响应。你可以用nc发送如下请求:$ nc site.it 80 GET / HTTP/1.0 Host: site.it User-Agent: curl/7.54.0 Accept: */*手动解析分块(如果非要用nc):忽略每个块开头的十六进制数字,直接提取后面的内容,最后把所有块的内容拼接起来就是完整的页面了。
内容的提问来源于stack exchange,提问作者Johnny Marcove
相关产品推荐
相关产品推荐

