背景技术
计算机网络通过允许一台计算机或设备(后文称为“计算系统”)使用电子消息通过网络与另一计算系统通信而增强了人们传递和访问信息的能力。当在计算系统之间传输电子消息时,电子消息通常经过对电子消息内的数据执行操作(例如,分组化、路由、流量控制等)的协议栈。开放系统互连(OSI)模型是用于实现这一协议栈的联网框架的一个示例。
OSI模型将用于传输电子消息的操作分解为若干不同的“层”,每一层被设计成在数据传输过程中执行特定的操作。尽管协议栈可能实现每一层,但许多协议栈仅实现选择性的层以供跨网络传输数据时使用。例如,当从计算系统发送数据时,数据发自应用层,并被向下传递到中间的较低层,然后到网络。当在计算设备处从网络接收数据时,它进入物理层,然后向上传送到较高的中间层,最终在应用层接收。应用层,即最高的层,负责支持应用程序和最终用户进程。大多数协议栈包含的另一层是传输层。传输层的一个示例是传输控制协议(TCP)。
在分布式系统中(例如,web服务环境),服务和对服务的请求使用HTTP来频繁地传输。超文本传输协议在OSI模型的应用层和其它较低层之间操作,以便于在分布式系统环境中传输内容。与大多数网络协议一样,HTTP使用了客户机-服务器模型。更具体地,客户计算机系统(后文称为“客户机”或“请求”端点)打开连接,并通过请求流向服务器(后文称为“服务器”或“服务”端点)发送请求消息。服务器然后通过HTTP通信的回复流返回响应消息,该响应消息通常包含所请求的资源(例如,文件、动态生成的查询结果或其它类似的数据块)。在传送 了响应之后,服务器关闭该连接;使得HTTP成为无状态协议,即,不维护事务之间的任何连接信息。
由于HTTP是无状态协议,因此HTTP认证不支持会话的概念,在会话中,用户可登录和/或登出。因此,访问通过HTTP传输的内容的每一请求(即,HTTP请求)必须包括适当的HTTP认证信息。由此,存在与对服务端点处接收的每一请求处理认证信息和确认客户机相关联的大量额外开销。
例如,通常HTTP协议提供了通过特殊的头部与每一HTTP请求一起提供的认证信息,该信息通常是认证类型和凭证的格式。客户机获取和发送这些凭证的方法如下。当客户机首次试图访问网站或需要认证的其它这类服务时,服务通常拒绝提供所请求的内容或信息,并向客户机返回HTTP出错消息(例如,未授权消息)以及某一形式的质询。当客户机接收这一消息,它需要使用正确的凭证适当地响应该质询,以访问服务资源。例如,客户机在接收到质询之后,可向用户呈现一弹出对话框,该对话框请求用户名和/或口令。作为替代,或者与其相结合,质询可要求如令牌等某一其它类型的凭证,例如X.509、Kerberos或其它类似的令牌。此外,其它类型的质询也可以是适用的。
无论质询的类型如何,在用户(或客户机,视情况而定)提供了正确的凭证(例如,通过键入正确的口令)之后,客户机可向服务器发送原始的HTTP请求;但是它可以添加授权头部,该授权头部现在包括了凭证作为头部标签的一个参数。如果服务接受所包括的凭证并返回有效内容,则客户机通常高速缓存这些凭证,并且随对同一服务或与同一内容相关联的派生服务的每一新请求一起重发它们。
在花费相当大量时间来处理的大文件传输或请求(例如,贷款过程)期间,做出若干请求以传输整个文件或处理整体请求。这很大程度是由于HTTP的特性,其中客户机被认为是不可寻址的,因为在没有通过对应于请求的回复流发送的情况下不向客户机发送任何数据。因此,对于需要花费时间来处理的大文件和整体请求,客户机必须连续地发送包括认证信息的请求;且服务器必须连续地处理这类认证凭证,并且在整体请求的适当部分变得可用时返回它们。
对每一请求的这一连续的验证和确认过程消耗了可在别处(例如,在处理整体响应时)利用的宝贵的系统资源。类似地,对与防火墙的严厉性相关联的连续请求的处理也消耗了宝贵的系统资源,由此,需要能够保持HTTP通信的回复流打开,以当整体响应的各部分可用时向客户机发送这些部分。换言之,需要能够接收/发送整体响应的多个部分,而无需对这些部分接收/发送若干请求。
具体实施方式
本发明延及用于在端点之间将HTTP响应作为多个不同部分来传输以保存宝贵的系统资源的方法、系统和计算机程序产品。本发明的实施例可包括具有如下所述的各种计算机硬件的专用或通用计算机。
本发明能够保持用于通信的HTTP回复流打开,使得整体响应的消息或各部分可以通过该HTTP回复流发送。当整体响应的各部分在对应的服务端点变得可用时,服务适当地封装消息,并将它们发送到请求端点。封装通常对每一服务是专用的,且其特定细节并不是本发明的核心。然而,重要的是存在一种用于读取响应的一小部分或一部分并确定封装的消息的边界的协定的方式。因此,作为一个请求的结果,响应实际上是整体响应的各部分的流,每一部分作为总请求的一小部分到来。
响应的接收者或请求端点然后能够读取该响应的可用部分,并适当地解码嵌入的部分并能够适当地自由处理这些部分。因此,即使尚未接收到完整的HTTP响应,请求端点也可以基于它已接收到的每一嵌入部分或消息来开始工作。另外,由于对响应的若干部分仅做出了一个请求,因此仅要求对请求端点进行一次认证和/或确认,从而保存了宝贵的系统资源。
图1A示出了上述的某些有利的实施例。如可以见到的,分布式系统100包括请求端点165和服务端点145,服务端点145可包括若干服务模块147、150、155、160。在一个实施例中,请求端点165通过HTTP请求流120发送请求消息115,以与服务端点145建立通信。请求消息115通常包括适当的凭证,以认证请求端点165。另外,其它认证方法也可用于本发明。例如,请求端点可建立共享机密或其它方式来认证请求消息115。另外,任何公知类型的凭证(例如,令牌、共享机密、加密等)也可用于本发明。因此,此处所描述的任何特定的认证方法和/或凭证类型仅用于说明性的目的,并不意味着局限或缩小本发明的范围。
如果至少有请求端点165被适当地认证(且如果端点支持且同意如下所述的封装格式),则当整体响应150的部分135、140变得可用时,它们可从服务端点145发送到请求端点165。例如,响应150的第一部分可在第一时间段通过HTTP回复流125发送,且当响应150的第二部分140变得可用时,在第二时间段,它也通过同一HTTP回复流125发送,只要请求端点165保持HTTP回复流125打开。
注意,在通信的任何类型的真实交换之前,示例实施例能够确保两个端点165、 145支持保持回复流对HTTP回复流125打开。这一确认允许两个端点165、145同意某一类型的编码以保持回复流125在通信期间打开。因此,部分135、140的包装通常对于请求165和服务145端点是专用的。此外,编码可以是预定的,在这一情况下,这一确认和动态地同意编码是不必要的。
用于封装的协定的标准的一个示例使用了例如可扩展标记语言(XML)文档等消息的头部部分。在这一示例中,服务端点145可连续地通过HTTP回复流125发送部分135、140,而无需包括“结束消息”头部,直到如下所述的一个或多个事件发生。然而,消息的主体需要被编码,使得请求端点165理解不同部分135、140都是整体响应150的部分。
也要注意,整体响应150的部分135、145是任意的数据,因为它们必须具有可变的大小和数据类型,即使是在同一响应中也是如此。例如,一个部分135可以是流数据,而另一部分140可以是单个消息。此外,其它数据类型和格式也可用于本发明。因此,任何特定类型或格式的消息仅用于说明性的目的,并不意味着局限或缩小本发明的范围,除非明确地要求保护。
存在可能希望如上所述地保持HTTP请求—回复通信的回复流125打开的若干优点和原因。例如,服务端点145在完整的回复要花费时间来产生时可能期望向请求端点165发送一个以上响应,但是回复的各部分在早先的时刻可用。这可以是请求端点165希望从服务端点145处购买物品的情况。在接收到请求消息115之后,服务端点145最初可发送第一部分135,该部分向请求端点165指示请求消息115已被接收。之后,服务端点145可在某一随后的时刻确认信用卡或其它个人信息,并向请求端点165发送整体响应150的第二部分140,该部分确认个人信息。当产品最终被运送到用户时,服务端点145可向请求端点165发送整体响应150的后续部分135、140,这些部分指示该物品已发货。响应150的任何其它后续的部分135、140,诸如跟踪或其它信息可在它们变得对服务端点145可用时作为信息的部分135、140来发送。
保持HTTP回复流打开的另一原因是完整响应150可以是来自诸如服务模块A-C 160、155、150等不同源的消息的组合。类似地,请求115可以是来自不同服务模块A-C 160、155、150的请求的集合。在任一情况下,服务端点145可获取或收集来自若干服务模块160、155、150的信息。例如,单个服务器147可利用从其它服务模块160、155、150提供的服务,并包括这些服务作为整体响应150的部分135、140。例如,在上文给出的示例中,服务端点145可通过服务模块A160确认 信用卡信息或其它个人信息;从服务模块B155接收传递状态;以及从服务模块C150检索跟踪信息。当信息的这些部分变得可用时,服务器147可担当各部分135、140的代理或路由器,并如上所述地通过HTTP回复流125来传输它们。
如上所述,服务器147如何知道从服务端点145内的各模块160、155、150检索信息可以变化。例如,有了适当的协定编码,请求端点165可在例如请求消息115内发送标识不同部分135、140的端点引用或服务的集合,以从各种服务模块160、155、150检索。服务器147然后可向各服务模块160、155、150做出适当的查询,并且当服务模块160、155、150处理并发回适当的响应时,服务器147可将这些响应作为整体响应150的部分130、145通过HTTP回复流125来发送。
可替换地(或者可能甚至与其相结合),针对服务器147的单个请求消息115可识别各部分130、145是从服务端点145内的各服务模块160、155、150所需的,并且可在适当时自动检索它们。用于标识和检索整体响应150的各部分的过程也可用于本发明。同样要注意,在服务端点145内仅示出了三个服务模块160、155、150,然而任何数量的服务或服务模块160、155、150都可用于本发明。因此,对引用服务模块160、155、150或服务端点145的任何特定的描述或此处所描述的任何特定数量的服务模块160、155、150仅用于说明性的目的,并不意味着局限或缩小本发明的范围,除非明确地要求保护。
保持HTTP通信的回复流125打开的另一原因可以是为了容纳具有有限缓冲空间的设备或端点165、145或支持未缓冲的通信。在这一实施例中,当响应是一组大数据且端点希望避免将整个数据缓冲到存储器中时,整体响应的较小部分135、140可以被周期性地或非对称地通过HTTP回复流发送,并且被直接处理以避免缓冲。这在流式音频或视频的情况下或对于具有有限系统资源的系统而言是期望的。
注意,在任何时刻,请求端点165可依照标准HTTP协议断开与服务端点145的连接或通信。这一连接切断可以是例如对传递了太多信息和/或发生了故障的表示。类似地,服务端点145具有停止产生或封装整体响应150的各部分135、140,并完成原始请求115的能力。因此,通信中的端点165、145的任一个具有由其自己做主切断典型机制组内的交互的能力。即,不需要任何新的HTTP机制来切断连接或关闭HTTP回复流125。
除在单个响应150中封装消息(即,整体响应150的部分135、140)的整体实施例之外,其它示例性实施例能够通过控制消息105管理端点165、145之间的 通信。控制消息105可以是帮助两个端点165、145管理这一封装的流交互的消息集合中的一个或多个。每一控制消息105可以被建模为消息的请求—响应对,它很好地适合HTTP传输模型。注意,通常控制消息应当使用与产生HTTP回复流125上的响应150的HTTP请求不同的HTTP请求来发送(110)。尽管初始请求消息115可包括通信的初始阶段的控制信息,然而另外的控制信息105需要通过另一请求—响应传输110来发送。
控制消息105也可通过其它类型的通信传输110在边界外传输,只要它们标识了请求端点165和服务端点145之间的特定通信。此外,通用于通过各种传输110向服务端点145发送控制消息105的其它过程和传输也可用于本发明。因此,对用于向服务端点145发送控制消息105的过程或特定传输的任何特定使用仅用于说明性目的,并不意味着局限或缩小本发明的范围。
存在可用于本发明的若干类型的控制消息105。例如,一种控制消息105可以是“批量传输是否可行”消息。该控制消息105用于确定端点是否可接受批量的、流传送的响应150。即,这一控制消息105可在建立通信的初始阶段使用,以确定这一通信是否被特定的端点165、145支持,以及使用什么类型的封装。另一种控制消息105可以是“挂起”消息,其中,请求端点165希望临时停止接收响应150的已封装部分135、140。另一种控制消息105可以是“继续进行”消息,其中请求端点165希望重新开始接收响应150的已封装部分。又一种控制消息105可以是“查验”,其中一个端点165、145希望确定另一端点165、145仍是可操作的。
其它控制消息105可包括“多路复用启动”消息。该特定控制消息105允许服务端点145(尤其是服务器147)传递它希望对其担当中间路由器或代理的端点引用的集合。因此,对任何这类端点引用的消息作为封装的部分如上所述地通过服务器147发送。
另一种控制消息105可以是“断开连接”消息,尽管这被描述为消息,但是它可以改为是包含端点引用的简单消息头部,该端点引用标识了HTTP响应150以使请求端点165能够参考响应150或端点145、165之间其它信道(例如,110)上的整体通信。如可以见到的,该数据具有多种用途,用于在各端点之间发送控制消息105以及其它信息。
用于控制通信的其它公知的控制消息105和/或头部也可用于本发明。因此,上述控制消息105的列表不意味着包含性的,对特定控制消息105的任何特定引用仅用于说明性的目的,并不意味着局限或缩小本发明的范围,除非明确地要求保护。
其它示例性实施例提供了两个端点服务之间的双向通信交换模式。在这一实施例中,上述用于建立通信的过程可以完成两次,每一端点既担当请求165又担当服务145端点。例如,如图1B所示,分布式系统100包括端点A170和端点B180。可通过从端点A170通过请求流A185发送请求来建立第一通信会话A175,其中整体响应的后续部分如上所述地通过回复流A190接收。类似地,端点B可依照示例性实施例通过在请求流B182上发送请求消息并通过回复流B184接收整体响应的后续部分,来建立通信会话B。在这一情况下,两个端点170、180通常应当协调哪些请求和整体响应的哪些部分对应于双向通信中的一个方向。
本发明也可按照包括功能步骤和/或非功能动作的方法来描述。以下是对可在实施本发明时执行的步骤和/或动作的描述。通常,功能步骤按照所实现的结果来描述本发明,而非功能动作描述用于实现特定结果的更具体动作。尽管功能步骤和/或非功能动作可以用特定的顺序来描述或要求保护,然而本发明不必限于步骤和/或动作的任何特定的顺序或组合。此外,在权利要求书的叙述中和以下对图2和3的流程图的描述中对步骤和/或动作的使用用于指示对这些术语所期望的特定使用。
图2和3示出了用于本发明的各示例性实施例的示例流程图。以下对图2和3的描述将偶尔参考来自图1A和1B的对应元素。尽管可对来自这些附图的特定元素做出参考,但是这些元素仅用于说明性的目的,并不意味着局限或缩小本发明的范围,除非明确地要求保护。
图2示出了用于将HTTP响应作为多个不同部分传输以保存与确认和授权对应请求相关联的宝贵的系统资源的方法200的示例流程图。注意,方法200是从请求端点165的视角来看的,并且包括通过HTTP请求流发送(205)请求消息的动作。例如,请求端点165可通过HTTP回复流125发送请求消息115,以建立与分布式系统100中的服务端点145的通信。请求消息115可包含用于控制通信的控制信息,例如控制消息105。然而,通常,控制消息在单独的通信中发送,以管理在请求端点165和服务端点145之间所建立的通信。如上所述,控制消息可以是“批量传输是否可行”、“挂起”、“继续进行”、“查验”、“重新连接”、“多路复用启动”、“该连接”等中的一个或多个。
在发送了请求消息之后,方法200包括通过HTTP回复流125接收(210)响应的第一部分的动作。例如,请求端点165可通过对应的HTTP回复流125接收响应的第一部分135,它是在第一时间段接收的。方法200还包括保持(215)HTTP 回复流125打开的动作。例如,请求端点165可保持HTTP回复流125打开,以接收响应150的其它部分。在没有发送另一请求消息的情况下,方法200也可包括通过HTTP回复流125接收(220)响应的第二部分的动作。例如,请求端点165可通过HTTP回复流125接收响应150的第二部分140,其中第二部分是在与第一时间段不同的第二时间段接收的。
第一135和第二140部分可以异步地接收,即以任意的间隔接收。此外,这些部分135、140可以是构成整体响应150的流传送的消息、个别消息或两者。此外,第一部分135和第二部分140可以是从分布式系统100内的单独服务模块160、155、150处理的离散消息。第一和第二部分135、140可以从单个服务147或服务器接收,这些服务或服务器使用从请求端点165发送的端点引用向单独的服务模块160、155、150请求离散消息135、140。这些端点引用可被包括在请求消息115中。可替换地,或者与其相结合,服务端点145可在控制消息105中向请求端点165发送它支持的端点引用。此外,端点引用可以通过与HTTP回复流125分离的通信传输在控制消息105中发送。
如上所述,可以在分布式系统100的两个端点之间建立双向通信。在这一实施例中,如果图1B中的端点A 170是图1A中的请求端点165;而图1B中的端点B180是图1A中的服务端点180,则在建立了第一通信会话A175之后,其它实施例提供以下过程。端点A170通过第二HTTP回复流(例如,请求流B182)接收第二请求消息,以在分布式系统100内的端点170、180之间建立双向通信会话。之后,端点A170可在第三时间段通过对应的第二HTTP回复流(例如,回复流B184)发送第二响应的第一部分。在不接收另一请求消息的情况下,端点A170可在与第三时间段不同的第四时间段通过第二HTTP回复流(例如,回复流B184)发送第二响应的第二部分。
从服务端点145的视角,图3依照本发明的示例性实施例示出了用于将HTTP响应作为多个不同的部分来传输的方法300。方法300包括通过HTTP回复流接收(305)请求消息的动作。例如,服务端点145可通过HTTP回复流125从请求端点165接收请求消息115。方法300还包括通过HTTP回复流发送(310)响应的第一部分的动作。例如,服务端点145可以在第一时间段通过HTTP回复流125发送响应150的第一部分135。方法300还包括通过HTTP回复流发送(315)响应的第二部分的动作。例如,服务端点145可在不同于第一时间段的第二时间段通过HTTP回复流125发送响应150的第二部分140。注意,先前描述的其它示例性 实施例也可应用于方法300。
本发明范围内的实施例也包括用于携带或在其上储存计算机指令或数据结构的计算机可读介质。这类计算机可读介质可以是可由通用或专用计算机访问的任一可用介质。作为示例而非局限,这类计算机可读介质可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁存储设备、或其它可用来以计算机可执行指令或数据结构的形式携带或储存所期望的程序代码手段并可由通用或专用计算机访问的任一介质。当通过网络或另一通信连接(或者硬布线、或者无线、或硬布线和无线的组合)向计算机传输或提供信息时,计算机适当地将该连接视为计算机可读介质。由此,任一这类连接适当地称为计算机可读介质。上述的组合也应当包括在计算机可读介质的范围内。计算机可执行指令包括,如,促使通用计算机、专用计算机或专用处理设备执行特定功能或功能组的指令和数据。
图4及以下讨论旨在提供对适于在其中实现本发明的计算环境的简要概括描述。尽管并非所需,但本发明将在诸如由网络环境中的计算机执行的程序模块等计算机可执行指令的一般上下文环境中描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等等,它们执行特定的任务或实现特定的抽象数据类型。计算机可执行指令、相关联的数据结构以及程序模块表示了用于执行这里揭示的方法的步骤的程序代码手段的示例。这一可执行指令或相关数据结构的特定顺序表示了用于实现在这类步骤中所描述的功能的相应动作的示例。
本领域的技术人员可以理解,本发明可以在具有多种类型计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、手持式设备、多处理器系统、基于微处理器或可编程消费者电子设备、网络PC、小型机、大型机等等。本发明也可以在分布式计算环境中实践,其中,任务由通过通信网络连接(通过硬布线链路、或者通过无线链路、或通过硬布线或无线链路的组合)的本地和远程处理设备来执行。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。
参考图4,用于实现本发明的示例性系统包括常规计算机420形式的通用计算设备,包括处理单元421、系统存储器422以及将包括系统存储器422的各类系统组件耦合至处理单元421的系统总线423。系统总线423可以是若干种总线结构类型的任一种,包括存储器总线或存储器控制器、外围总线以及使用各类总线体系结构的总线。系统存储器包括只读存储器(ROM)424和随机存取存储器(RAM)425。基本输入/输出系统(BIOS)426包含如在启动时协助在计算机420内的元件 之间传输信息的基本例程,它可储存在ROM 424中。
计算机420也可包括用于对磁硬盘439进行读写的磁硬盘驱动器427、用于对可移动磁盘429进行读写的磁盘驱动器428、以及用于对可移动光盘431,如CD-ROM或其它光介质进行读写的光盘驱动器430。磁硬盘驱动器427、磁盘驱动器428以及光盘驱动器430分别通过硬盘驱动器接口432、磁盘驱动器接口433和光盘驱动器接口434连接至系统总线423。驱动器及其相关联的计算机可读介质为计算机420提供了计算机可执行指令、数据结构、程序模块和其它数据的非易失性存储。尽管这里描述的示例环境采用了磁硬盘439、可移动磁盘429以及可移动光盘431,然而也可以使用用于储存数据的其它类型的计算机可读介质,包括盒式磁带、闪存卡、数字多功能盘、Bernoulli盒式磁盘、RAM、ROM等等。
包括一个或多个程序模块的程序代码装置可储存在硬盘439、磁盘429、光盘431、ROM424或RAM425中,包括操作系统435、一个或多个应用程序436、其它程序模块437以及程序数据438。用户可以通过键盘440、定位设备442或其它输入设备(未示出),如麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等向计算机420输入命令和信息。这些和其它输入设备通常通过耦合至系统总线423的串行端口接口446连接到处理单元421。可选地,输入设备也可以通过其它接口连接,如并行端口、游戏端口或通用串行总线(USB)。监视器447或另一显示设备也通过接口,如视频适配器448连接到系统总线423。除监视器之外,个人计算机通常包括其它外围输出设备(未示出),如扬声器和打印机。
计算机420可以使用到一个或多个远程计算机,如远程计算机449a和449b的逻辑连接在网络化环境中操作。远程计算机449a和449b的每一个可以是另一个人计算机、服务器、路由器、网络PC、对等设备或其它普通网络节点,并通常包括许多或所有相对于计算机420所描述的元件,尽管在图4中仅示出了存储器存储设备450a和450b及其关联的应用程序436a和436b。图4描述的逻辑连接包括局域网(LAN)451和广域网(WAN)452,这里示出作为示例而非局限。这类网络环境常见于办公室范围或企业范围计算机网络、内联网以及因特网。
当在LAN网络环境中使用时,计算机420通过网络接口或适配器453连接至局域网451。当在WAN网络环境中使用时,计算机420可包括调制解调器454或用于通过广域网452,如因特网建立通信的其它装置。调制解调器454可以是内置或外置的,通过串行端口接口446连接至系统总线423。在网络化环境中,相对于计算机420所描述的程序模块或其部分可储存在远程存储器存储设备中。可以理 解,示出的网络连接是示例性的,也可以使用通过广域网452建立通信的其它装置。
本发明可以用其它特定的形式来实施而不脱离其精神或本质特征。所描述的实施例被认为在所有方面仅是说明性而非限制性的。因此,本发明的范围由所附权利要求书而非以上描述来指示。落入所附权利要求书的等效技术方案的意义和范围内的所有改变都包含在其范围之内。