我们怎么能欺骗HTTP协议?

Kev*_*oyd 2 protocols header http

虽然HTTP无处不在,但它带来了Headers的包袱,在我看来它正变得越来越成问题.我要传输的数据是HTTP标头大小的iota.

  • 是否有其他我可以使用的协议,浏览器和其他网络仍然可以理解这个协议并没有带来HTTP的包袱?
  • 任何其他方式跳过标题并将其添加到目的地,因此只有极少数数据通过网络传输?

cha*_*aos 7

  1. 没有.
  2. 没有.

许多HTTP标头是可选的.典型的浏览器请求比最小请求大得多,这可能看起来像:

GET /doc HTTP/1.1
Host: example.com
Connection: close
Run Code Online (Sandbox Code Playgroud)

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

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

  • @some:HTTP 1.0默认为`connection:close`,HTTP 1.1默认为`connection:keep-alive`. (2认同)

Nel*_*son 5

HTTP请求可能非常小.正如混乱在他的回答中指出的那样,你并不需要发送带有请求的许多标题.唯一的标题是Host.我可以通过使用HTTP 1.0来简化混乱的例子,它不具有持久连接.

GET / HTTP/1.0
Host: example.com
                                       (blank line is necessary)
Run Code Online (Sandbox Code Playgroud)

回复可以同样简单

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

data content
Run Code Online (Sandbox Code Playgroud)

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

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

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