【问题标题】:Confused about the HTTP protocol对 HTTP 协议感到困惑
【发布时间】:2011-10-09 11:25:29
【问题描述】:

我对 HTTP 协议有点困惑,据我所知,HTTP 是为交付网页而设计的,主要用于在网络服务器和浏览器之间发送消息。 但似乎在许多确实使用互联网进行通信但不是 Web 应用程序(“使用 Web 浏览器作为客户端的应用程序”)的应用程序中的任何地方都使用了 HTTP。

我问这个是因为我开始开发一个 iPhone 应用程序(一种导航应用程序),我需要在 iPhone 客户端和我的服务器之间发送消息。现在人们一直告诉我使用 HTTP 协议,但这真的是要走的路吗?

【问题讨论】:

    标签: http web-applications client-server protocols


    【解决方案1】:

    您的问题是有效的,如果我可以重申一下,为什么我们对每个服务器-客户端通信都使用 HTTP,而它通常用于浏览器-Web 服务器用例,并且与直接 TCP 通信相比效率较低。我的理由如下:

    • HTTP 协议极其简单,就像技术上的许多事情一样,简单性胜过复杂性,即使复杂的解决方案效率更高(除非有很大的优势)。
    • HTTP 协议是无状态的,因此通过添加更多机器和通过简单的负载平衡技术(如循环法)平衡负载来实现水平扩展变得更加简单。
    • 找到一个合理且免费的 HTTP 服务器来让您的应用尽快启动和运行比实现您自己的协议、服务器和将注意力从您想要解决的实际问题上转移开来更容易。
    • 与多方使用的任何简单技术一样,随着时间的推移,它会变得更好,并且借助 Keep-Alive、分块传输、流水线等现代功能,您可以克服连接开销的一些缺点。

    【讨论】:

    • 感谢您的回复,我得到了使用 HTTP 的好处,但是如果我需要从服务器向客户端发送消息怎么办?我如何使用无状态协议来做到这一点?服务器不保留打开的套接字,那么它如何向客户端发送消息?
    • 视情况而定,无状态协议有其优势,只要您可以围绕它设计您的需求并获得服务器无状态的好处。但这并不意味着所有应用程序都可以推入该用例。在 http 中维护状态的典型方法是在客户端使用 cookie。现在有许多解决方法可以满足您的用例,例如“Hanging GET/COMET”或更新的 WebSockets。
    • 另一个原因是它在互联网上被广泛使用并且对防火墙友好。
    【解决方案2】:

    是的,这就是要走的路。你还想怎么做?

    Web Server <-------HTTP-------> Client
    

    客户端可以是浏览器、手机、Xbox。服务器请求接收端的任何东西都是客户端。

    【讨论】:

    • 是的,HTTP 是用于网络客户端/服务器通信的方式。我们现在(终于)看到了从疯狂的 SOAP 到 HTTP 的巨大转变。 @Eyal:如果您对分散式网络系统背后的迷人问题感兴趣,请务必查看 REST(以及 2001-2010 年的 REST 与 SOAP 之战)。
    【解决方案3】:

    同意从 SOAP 迁移到 REST 和 QUERY 是一件好事。 我们目前正在实施一个使用 HTTP 作为双向传输机制的系统。 返回上传到服务器的响应是标准的 HTTP 响应,例如 200 = 没有正文的成功。 对查询的响应是一个以答案为正文的 ASCII 文本页面。然后,我们只需将 ASCII 转换回二进制即可使用数据。 这种方法的优点是您只需提供正确的 URL 和参数,就可以处理所有事情。 除非您的协议栈知道如何格式化 post 和 get 请求,否则您需要自己做。虽然这很乏味,但在W3C Protocols 上有很好的记录,但是必须自己完成这一切有点乏味。因此,如果您不得不这样做,那么我建议您购买一本电子书来帮助整理详细信息。一些例子是: HTTP

    【讨论】: