http/0.9 缓存投毒 图片详解

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】
flask's built-in server了, 支持 http/0.9, python 的 flask
先看一个不带header 的http/1.1的请求
然后看一个不带header 的http/0.9的请求
注意上面两个图片有一个共同点,就是返回的内容都有首页两个字,这个首页两个字是我自己搭建服务器当访问http://127.0.0.1/ 时会返回的内容。。。 图一和图二有一个非常明显的区别,就是图一返回数据包有Header 但是图二没有。。。
好,我们现在重新构造返回内容,就是把首页两个字替换为header头部的内容。注意看哦。。。
修改返回内容后的图一 用http/1.1访问
我们再看用http/0.9访问的结果。
图二的返回头header 就是图一的返回内容!!!明白了么?
最后看一下官方说明:https://www.w3.org/Protocols/HTTP/AsImplemented.html
1991年定义的原始HTTP
本文档定义了最初由发布的原型中的万维网初始化软件实现的超文本传输协议(HTTP)。这是完整 HTTP协议的子集, 称为HTTP 0.9。
不会随查询一起传输客户端配置文件信息。未来的HTTP协议将与此协议反向兼容。
这种受限制的协议非常简单,当您不需要向后兼容的完整协议的功能时,可以始终使用该协议。
该协议的定义属于公共领域(请参阅 策略)。
该协议在TCP-IP链路上使用正常的Internet风格的telnet协议样式。下面描述了给定HTTP文档地址的客户端如何从HTTP服务器获取(超文本)文档 。
连接
客户端使用域名或 IP号以及地址中给出的 端口号与主机建立TCP-IP连接 。
如果未指定端口号,则始终为HTTP假定为80。
服务器接受连接。
注意:HTTP当前通过TCP运行,但可以在任何面向连接的服务上运行。在顺序分组服务(例如DECnet TM或ISO TP4)的情况下对以下协议的解释是请求应该是一个TPDU,但响应可能很多。
请求
客户端发送一个文档请求,该请求由一行由CR LF(回车,换行)对终止的ASCII字符组成。性能良好的服务器不需要回车符。
此请求包含单词“GET”,空格, 文档地址,当它们是用于建立连接的坐标时,省略“http:,主机和端口部分。”(如果正在使用网关,则为满可以给出文档地址,指定不同的命名方案)。
文档地址将由一个单词组成(即没有空格)。如果在请求行上找到任何进一步的单词,它们必须被忽略,或者根据完整的HTTP规范进行处理。
只有在使用ISINDEX标记将索引文档本身描述为索引时,才应由客户端请求搜索 。
响应
对简单GET请求的响应是超文本标记语言(HTML)中的消息。这是ASCII字符的字节流。
行应由可选的回车符后跟强制换行符来分隔。客户不应该假设回车将出现。线条可以是任何长度。性能良好的服务器应将行长度限制为80个字符,不包括CR LF对。
消息的格式是HTML - 即剪裁的SGML文档。请注意,此格式允许菜单和命中列表作为超文本返回。它还允许在PLAINTEXT标记之后返回纯ASCII文本。
通过服务器关闭连接来终止消息。
表现良好的客户将尽快阅读整个文档。在读取整个文档之前,客户端不应等待用户操作(例如输出分页)。服务器可能会在不活动时施加15秒的超时。
HTML语法中的人类可读文本中提供了错误响应。除文本内容外,无法区分错误响应和令人满意的响应。
断开
传输整个文档时,服务器会破坏TCP-IP连接。
客户端可以通过在此之前断开连接来中止传输,在这种情况下,服务器不应记录任何错误情况。
请求是幂等的。断开连接后,服务器无需存储有关请求的任何信息。
对了有一个很神奇的事情,就是我用 Http/0.9去访问 阿帕奇。然后得到如下图:
布施恩德可便相知重
微信扫一扫打赏
支付宝扫一扫打赏