Cha*_*eep 0 web-services tcp http
我现在正在使用Web服务.我们有两种类型的服务,一种是通过HTTP,另一种是通过TCP.当试图理解这两者之间的区别时,根据我的理解,TCP上的服务在传输层工作,即它们通过两端传输数据.因此,在这种情况下,TCP上的服务将直接在两端之间传输数据.但我对HTTP上的服务并不是那么清楚.我知道我们有一个客户端服务器模型,REST,SOAP和HTTP是传输数据的协议,但我无法通过HTTP正确地关联服务的概念!
任何人都可以请一个类比来解释两者之间的区别吗?
正如John Saunders试图暗示的那样,我同意理解这些协议提供的抽象更为重要,而不是特定模型(OSI)中可能调用的特定"层".虽然通用模型有帮助和适用,但它没有提供实际协议的具体细节.
如此说来,所谓的区别传输层服务使用TCPVS 应用层服务使用HTTP,恕我直言归结为之间的比较TCP和HTTP本身.
我将开始说,我希望任何人都知道甚至模糊地熟悉这些协议,这HTTP是更高级别的抽象,TCP而实际上它依赖于TCP/IP自身.因此,HTTP显然继承了可靠性等特定功能TCP/IP.
现在对比 -
TCP服务
设计您自己的应用程序级协议 - 您可以设计自己的应用程序级协议.例如,客户端如何请求添加员工的操作?客户如何申请寻找特定员工?等等...您如何指出客户端和服务器之间可以交换数据的格式?您如何区分元数据(如请求信息)和数据?
效率 - 可以高效,紧凑地传输数据.由于您定义了自己的应用程序层协议,因此可以是从二进制到字符串到XML以及您可以梦想的任何其他内容.
HTTP例如,建立TCP在外行的基础上,主要是使用键值对样式请求标题 .. vs SOAP,其中大部分信息作为消息包络和消息体传递(这就是为什么SOAP可以结束HTTP以及其他协议如Message Queues)
性能 - 考虑到具有非常紧凑的应用层协议的可能性,它也可以相对快速.对于真正高吞吐量,高性能,延迟敏感的Intranet应用程序,这可能是一个决定性因素.
开发工作 - 当您尝试定义和实现自己的应用层协议时,除了灵活性之外,您最终还是会编写更多代码.
HTTP服务
为您定义了更大的应用程序协议部分 - 您可以通过定义良好的HTTP协议设计应用程序.通常HTTP Get意味着查询资源.请求网址中的查询过滤器可用于搜索.HTTP POST, PUT and DELETE同样具有特定的,定义明确的语义.
错误/故障处理 - 使用HTTP协议中定义的标准指示甚至错误.如状态代码200(成功)vs 400(BadRequest).
效率 - 可能非常冗长.协议几乎定义了必须如何定义请求的每个方面..并且通常是基于文本的...
开发和工具支持 - HTTP可以更轻松地使用现有的各种工具来发送,接收和调试请求(Fiddler或者Charles Proxy是着名的HTTP调试工具).
Internet /防火墙友好 - HTTP通常用于端口80(虽然理论上也可以是其他端口).这使得它不仅适用于Intranet应用程序,您可以更好地控制您打开的防火墙和端口......还可以通过Internet访问这些服务,因为端口80通常几乎在世界上的每台机器上都可以打开...
多种服务的共存 - HTTP如此广泛使用,预计在给定的机器上有多个应用程序/服务可以使用它.操作系统通常在操作系统中内置特殊支持来处理这个(http.sys打开Windows)并且你没有担心一个应用程序/服务踩到另一个应用程序/服务,意外地使用相同的端口(在这种情况下会丢失一个).在这种情况下,客户端和服务器之间的端口协商通常不是问题,因为HTTP预计位于端口80.
保护通信通道 - 在确保通信安全方面,还有明确的方法来建立通信...即HTTPS.与TCP/IP基于服务不同,您不必创建自己的方案来加密客户端和服务器之间的通信.
托管服务 - 理论上,有更多的方式来托管HTTP服务而不是TCP服务,再次由于HTTPWeb应用程序已经是常见的场景,Web服务器就像IIS已经迎合了这样.您的HTTP服务可以充分利用Web服务器IIS已有的无数开箱即用功能..回收,身份验证,资源管理,请求过滤,缓存,动态压缩和记录等等.您可以免费获得HTTP任何托管服务成熟的Web服务器产品.
互操作性跨平台/技术堆栈 -有了HTTP,那将是更容易使用任何技术栈的组合,又因为协议的实施将支持通常在各种平台上..从Linux/ Unix到Windows...或.Net到Java到Ruby..你会从目前这些平台上支持现有的工具和技术得到好处HTTP..因此Http可以成为事实的选择,如果,例如,你希望服务器来.Net上Windows,但客户在Java上Unix.
我可以继续......这绝不是一个详尽的清单,我相信很多其他人可以为此添加更多......但希望这能让你对你所看到的东西有个好主意.我可以清楚地看到,这可能是一个非常深刻的主题..根据您的回复和时间,我可能会在将来编辑此答案..或鼓励其他人更新它,因为他们认为合适.
旁注 -有趣的是,即使HTTP增加了很多TCP/IP,使其成为应用程序协议的一个伟大且无处不在的选择.总是存在更多/更高级别抽象的范围.所以,还有其他更新的服务协议,建立在HTTP.例如 - Odata.看看OData你是否好奇..
当然,在今天的服务世界中,如果不提及,讨论就不会完整REST.
编辑:另一个有趣的附注 -如果你在Windows平台上构建,并使用.Net框架,有像Windows Communication Foundationaka 这样的框架WCF,试图提供这样的抽象,你可以换掉你选择的通信协议(客户端和服务器选择必须仍然匹配) ,从HTTP到TCP到MSMQ到IPC等,与单纯的配置改变,或者通过创建多个主机上的多个通信协议的相同的服务端点.请参阅了解各种类型的WCF绑定,以获得高级概述和各种开箱即用选项的比较WCF.