我们怎么能欺骗 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 协议呢?的主要内容,如果未能解决你的问题,请参考以下文章