我们怎么能欺骗 HTTP 协议呢?

Posted

技术标签:

【中文标题】我们怎么能欺骗 HTTP 协议呢?【英文标题】:How could we fool the HTTP protocol? 【发布时间】:2009-09-19 17:53:39 【问题描述】:

虽然 HTTP 无处不在,但它带有标题的包袱,在我的情况下,这变得越来越成问题。 我要传输的数据是 HTTP 标头大小的一小部分。

我可以使用其他协议吗 仍然可以理解的用途 浏览器和其他网络,并且不附带 HTTP 的包袱? 是否有其他方法可以跳过标头并将其添加到目标位置,以便通过网络仅传输极少的数据?

【问题讨论】:

为什么不只使用那些你只需要的标题字段呢?只有少数是真正需要的。 您似乎真的在问:我怎样才能减少这些标题。如果您使用的是框架,我会查看它的文档,查看添加标头的位置,然后从那里开始。 【参考方案1】:
    没有。 没有。

许多 HTTP 标头是可选的。典型的浏览器请求远大于最小请求,可能如下所示:

GET /doc HTTP/1.1
Host: example.com
Connection: close

(我可以自信地说这种形式的请求有效,因为我在通过telnet example.com 80 测试 Web 服务器响应时一直使用它们。)

您可能只需省略一些标题即可获得有用的结果。

【讨论】:

哇!这看起来不错,我们可以只用那个最小的标题吗? 可能。这完全取决于“绕过”是什么意思。 我正在使用 Java ME 发送请求,是否有一种机制可以将其他标头清空,或者我们应该为它们发送空字符串? 抱歉,我不熟悉 Java ME。您需要查看它的文档或询问知道它的作用的人。 @some:HTTP 1.0 默认为connection: close,HTTP 1.1 默认为connection: keep-alive【参考方案2】:

HTTP 请求可能非常小。正如混乱在他的回答中指出的那样,您实际上并不需要发送许多带有请求的标头。唯一重要的标头是 Host。我可以通过使用不具有持久连接的 HTTP 1.0 进一步简化 Chaos 的示例。

GET / HTTP/1.0
Host: example.com
                                       (blank line is necessary)

回复也可以很简单

HTTP/1.0 200 OK
Content-Type: text/html

data content

在这种情况下,HTTP 的开销大约是请求和响应中的 40 个字节。一个标准的 TCP 数据包是 1500 字节,因此您在响应数据包中有足够的空间来存储实际数据。

还有其他 HTTP 标头,它们确实有价值。您可以包含缓存信息并执行条件 GET。您可以使用 HTTP/1.1 持久套接字来加快后续请求。等等等等。如果你不想要,你不必使用这些东西,但是关于 HTTP 的一个好处是有一种标准方法可以在你需要时执行更复杂的协议。

至于在 JavaME 中做最少的 HTTP,如果你真的关心每一个字节,你最好编写自己的简单 HTTP 客户端,使用普通的 TCP socket。如果您正在与已知服务器通信,则根本不需要实现太多。 (如果您正在与任意服务器通信,则需要更加注意错误处理、重定向等)。

【讨论】:

尽管 HTTP RFC 强烈反对它,但您也可以去掉请求中的“Host”标头——只要您联系的服务器不是多宿主服务器Web 服务器(即多个网站/域共享一个 IP 地址)。见w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.6.1.1【参考方案3】:

WebSockets 以 HTML5 形式出现,应该可以满足您的需求。可以重新协商标准 HTTP 连接以将协议更改为 websocket。但我怀疑该规范可能有点年轻,但它可能符合要求。

【讨论】:

我想是的;我看到一家名为 kaazing 的公司的一些人展示了它。不过,不要期望太多的浏览器支持。

以上是关于我们怎么能欺骗 HTTP 协议呢?的主要内容,如果未能解决你的问题,请参考以下文章

图解ARP协议代理ARP原理与实践(“善意的欺骗”)

如何成为一名黑客(网络安全从业者)——网络攻击技术篇(3/8 网络协议欺骗)

HTTP 浏览器欺骗

ARP欺骗分析

arp欺骗进行流量截获-1

Jmeter也能IP欺骗!