发明内容
为了至少解决现有技术中解决跨域沟通成本高,不够友好,同时在跨域中cookie凭证失效的问题。
第一方面,本发明实施例提供一种用于语音对话平台的跨域名联调方法,包括:
中间层服务端接收web客户端发起的联调请求,其中,所述联调请求至少包括:目标url、所述web客户端的cookie;
所述中间层服务端检测所述目标url是否匹配所述中间层服务端内预配置的domain配置;
当匹配时,通过所述中间层服务端将所述联调请求转发至目标接口;
所述中间层服务端提取所述目标接口反馈的set-cookie,提取所述set-cookie中的domain字段;
判断所述set-cookie中的domain字段与所述中间服务层内预配置recookie是否匹配;
当所述set-cookie中的domain字段与所述中间服务层内预配置recookie相匹配时,根据所述web客户端的cookie重写所述目标接口反馈的set-cookie,将重写后的set-cookie发送至所述web客户端,以完成web客户端与目标接口的跨域联调。
第二方面,本发明实施例提供一种用于语音对话平台的跨域名联调系统,包括:
联调请求接收程序模块,用于中间层服务端接收web客户端发起的联调请求,其中,所述联调请求至少包括:目标url、所述web客户端的cookie;
配置匹配程序模块,用于所述中间层服务端检测所述目标url是否匹配所述中间层服务端内预配置的domain配置;
联调请求转发程序模块,用于当匹配时,通过所述中间层服务端将所述联调请求转发至目标接口;
domain字段提取程序模块,用于所述中间层服务端提取所述目标接口反馈的set-cookie,提取所述set-cookie中的domain字段;
recookie匹配程序模块,用于判断所述set-cookie中的domain字段与所述中间服务层内预配置recookie是否匹配;
跨域联调程序模块,用于当所述set-cookie中的domain字段与所述中间服务层内预配置recookie相匹配时,根据所述web客户端的cookie重写所述目标接口反馈的set-cookie,将重写后的set-cookie发送至所述web客户端,以完成web客户端与目标接口的跨域联调。
第三方面,提供一种电子设备,其包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例的用于语音对话平台的跨域名联调方法的步骤。
第四方面,本发明实施例提供一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现本发明任一实施例的用于语音对话平台的跨域名联调方法的步骤。
本发明实施例的有益效果在于:通过使用服务端作为代理,绕过浏览器安全策略,相比于现有方法更加灵活,同时通过配置recookie字段,实现web客户端获取重写后的set-cookie,解决跨域下携带身份凭证的问题。使得用户不仅可以在本地调试各个环境接口服务,而且可以在本机直观地定位、分析各种环境所产生的问题。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示为本发明一实施例提供的一种用于语音对话平台的跨域名联调方法的流程图,包括如下步骤:
S11:中间层服务端接收web客户端发起的联调请求,其中,所述联调请求至少包括:目标url、所述web客户端的cookie;
S12:所述中间层服务端检测所述目标url是否匹配所述中间层服务端内预配置的domain配置;
S13:当匹配时,通过所述中间层服务端将所述联调请求转发至目标接口;
S14:所述中间层服务端提取所述目标接口反馈的set-cookie,提取所述set-cookie中的domain字段;
S15:判断所述set-cookie中的domain字段与所述中间服务层内预配置recookie是否匹配;
S16:当所述set-cookie中的domain字段与所述中间服务层内预配置recookie相匹配时,根据所述web客户端的cookie重写所述目标接口反馈的set-cookie,将重写后的set-cookie发送至所述web客户端,以完成web客户端与目标接口的跨域联调。
在本实施方式中,浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。例如:
域名:
主域名不同http://www.baidu.com/index.html->http://www.sina.com/test.js
子域名不同http://www.a.baidu.com/index.html->http://www.b.baidu.com/test.js
域名和域名ip http://www.baidu.com/index.html->http://180.142.132.47/test.js
端口:
http://www.baidu.com:8080/index.html–>http://www.baidu.com:8081/test.js
协议:
http://www.baidu.com:8080/index.html->https://www.baidu.com:8080/test.js
备注:
1、端口和协议的不同,只能通过后台来解决。
2、localhost和127.0.0.1虽然都指向本机,但也属于跨域。
对于步骤S11,所述web客户端指用户在本地所使用的本地web客户端。用户在编辑语音技能时,会根据项目的需求,给所述语音技能搭载相应的功能。而为了相应功能的实现,会调用相应的应用程序接口,例如,给语音技能搭载查询交通限行的功能,可以给所述技能联调相应的应用程序接口,为了与目标接口达成联调,需要通过url(UniformResource Locator,统一资源定位符)进行匹配。所以,在开发环境中的中间层服务端接收用户在web客户端发起的联调请求,其中,所述联调请求包括:目标url,例如:https://s.dui.ai/webhook/restriction(查询交通限行的应用程序接口);以及用户的web客户端的cookie。
对于步骤S12,中间层服务端根据所述目标url,进行相应的匹配。进而通过比对目标url以及所述中间层服务内与配置的domain是否匹配。其中,domain简单的定义为:是一个逻辑管理单元,domain下面包含着weblogic应用服务器的所有东西,weblogic应用服务器的启动,停止都是以domain为单位进行管理的。
例如,在中间层服务中会有如下配置:
对于步骤S13,假设当目标url与所述中间服务层与配置的domain匹配时,通过中间层服务端,将用户在web客户端发起的联调请求转发至相应的目标域下的目标接口。此时,已经跳过浏览器安全策略的限制,通过跨域直接访问指定的应用程序接口服务。
例如,web客户端发起的请求url“http://localhost:8000/account/info”其中localhost为本地主机,8000为服务端口;到中间层服务。中间层服务根据domain中的配置对所述请求url进行匹配。如步骤S12中,中间层服务端内domain配置的"^/accout";与目标url“http://localhost:8000/account/info”匹配。则生成目标接口地址“http://authentication.dui.ai/account/info“,并转发到目标接口http://authentication.dui.ai上。
对于步骤S14,中间层服务端提取在步骤S13后目标接口反馈的RH(RseponseHeaders,响应头)中的set-cookie,进而查询所述set-cookie中的domain字段。其中,set-cookie是setcookie()函数向客户端发送一个HTTP cookie。cookie是由服务器发送到浏览器的变量。cookie通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个cookie。而recookie配置是cookie数据中的部分数据。例如,读取的domain字段如下:“token=tyuioghjklkjoiuyae;domain=dui.ai;”。
对于步骤S15,判断所述在步骤S14中提取的domain字段,与所述中间服务层内与配置的recookie是否匹配。其中,所述中间服务层内与配置的recookie在步骤S12中举例,如下:
set-cook中的domain字段为domain=dui.ai。
对于步骤S16,当所述set-cookie中的domain字段与所述中间服务层内预配置recookie相匹配时,都为dui.ai,相匹配。如果匹配时,则把当前的响应头中的domain值重写为:“token=tyuioghjklkjoiuyae;domain=localhost;”,并发送到web客户端中,这样,cookie便种在了web客户端的localhost(本机)下。
通过该实施方式可以看出,通过使用中间层服务端作为代理,绕过浏览器安全策略,相比于现有方法更加灵活,同时通过配置recookie字段,实现对目标接口cookie的重写,解决跨域下携带身份凭证的问题,并且不需用户在联调时考虑各种环境的问题。
作为一种实施方式,在本实施例中,所述联调请求还包括:web客户端的domain配置;
服务端将所述联调请求转发至与所述web客户端的domain配置相对应的目标接口。
在本实施方式中,在检测domain域配置还包括,将web客户端的domain域配置搭载到联调请求的请求头中。此时,客户端无需做匹配工作,客户端可以直接根据所述web客户端的domain域配置,向目标接口进行转发。
通过该实施方式可以看出,在请求头文件中添加了web客户端的domain域配置,无需服务端进行匹配工作,减少了服务端的工作量,同时由于服务端仅做转发,当服务端的配置升级/更新/发生变化时无需重启服务,提高了前后端联调的效率。
作为一种实施方式,在本实施例中,所述方法还包括:
当所述联调请求中的目标url与所述中间层服务端内预配置的domain域配置匹配失败时,向web客户端反馈匹配失败信息。
在本实施方式中,当所述联调请求中的目标url与所述中间层服务端内与配置的domain配置失败时,表明用户所需要联调的目标url不存在或者相应的字符打错了。而向web客户端反馈匹配失败的信息,可以让用户通过匹配失败的信息进行相应的检查,查询相应的失败问题。
通过该实施方法可以看出,通过在目标url与目标接口的domain域配置匹配失败时,反馈相应的匹配失败信息,提示用户错误信息,便于用户进一步修改,提高了联调效率。
作为一种实施方式,在本实施例中,所述方法还包括:
当所述目标接口反馈的set-cookie中没有配置domain字段时,,将所述set-cookie发送至所述目标接口。
在本实施方式中,由于有的目标接口可能没有配置相应的domain字段。针对于这种情况,就不进行处理,同时,为了用户体验,可以将将重写失败的信息反馈给web客户端来提示用户。
通过该实施方法可以看出,当目标接口反馈的set-cookie中没有配置domain字段时,不进行处理,保证日常的稳定使用,同时,为了用户体验反馈相应的重写失败信息,便于用户进一步调整,提高了联调效率。
如图2所示为本发明一实施例提供的一种用于语音对话平台的跨域名联调系统的结构示意图,该系统可执行上述任意实施例所述的用于语音对话平台的跨域名联调方法,并配置在终端中。
本实施例提供的一种用于语音对话平台的跨域名联调系统包括:联调请求接收程序模块11,配置匹配程序模块12,联调请求转发程序模块13,domain字段提取程序模块14,recookie匹配程序模块15和跨域联调程序模块16。
其中,联调请求接收程序模块11用于中间层服务端接收web客户端发起的联调请求,其中,所述联调请求至少包括:目标url、所述web客户端的cookie;配置匹配程序模块12用于所述中间层服务端检测所述目标url是否匹配所述中间层服务端内预配置的domain配置;联调请求转发程序模块13用于当匹配时,通过所述中间层服务端将所述联调请求转发至目标接口;domain字段提取程序模块1用于所述中间层服务端提取所述目标接口反馈的set-cookie,提取所述set-cookie中的domain字段;recookie匹配程序模块15用于判断所述set-cookie中的domain字段与所述中间服务层内预配置recookie是否匹配;跨域联调程序模块16用于当所述set-cookie中的domain字段与所述中间服务层内预配置recookie相匹配时,根据所述web客户端的cookie重写所述目标接口反馈的set-cookie,将重写后的set-cookie发送至所述web客户端,以完成web客户端与目标接口的跨域联调。
进一步地,所述联调请求还包括:web客户端的domain配置;
服务端将所述联调请求转发至与所述web客户端的domain配置相对应的目标接口。
进一步地,所述系统还用于:所述系统还用于:
当所述联调请求中的目标url所述中间层服务端内预配置的domain域配置匹配失败时,向web客户端反馈匹配失败信息。
进一步地,所述系统还用于:
当所述目标接口反馈的set-cookie中没有配置domain字段时,,将所述set-cookie发送至所述目标接口。
本发明实施例还提供了一种非易失性计算机存储介质,计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例中的用于语音对话平台的跨域名联调方法;
作为一种实施方式,本发明的非易失性计算机存储介质存储有计算机可执行指令,计算机可执行指令设置为:
中间层服务端接收web客户端发起的联调请求,其中,所述联调请求至少包括:目标url、所述web客户端的cookie;
所述中间层服务端检测所述目标url是否匹配所述中间层服务端内预配置的domain配置;
当匹配时,通过所述中间层服务端将所述联调请求转发至目标接口;
所述中间层服务端提取所述目标接口反馈的set-cookie,提取所述set-cookie中的domain字段;
判断所述set-cookie中的domain字段与所述中间服务层内预配置recookie是否匹配;
当所述set-cookie中的domain字段与所述中间服务层内预配置recookie相匹配时,根据所述web客户端的cookie重写所述目标接口反馈的set-cookie,将重写后的set-cookie发送至所述web客户端,以完成web客户端与目标接口的跨域联调。
作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中的测试软件的方法对应的程序指令/模块。一个或者多个程序指令存储在非易失性计算机可读存储介质中,当被处理器执行时,执行上述任意方法实施例中的用于语音对话平台的跨域名联调方法。
非易失性计算机可读存储介质可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据测试软件的装置的使用所创建的数据等。此外,非易失性计算机可读存储介质可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,非易失性计算机可读存储介质可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至测试软件的装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本发明实施例还提供一种电子设备,其包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例的用于语音对话平台的跨域名联调方法的步骤。
本申请实施例的客户端以多种形式存在,包括但不限于:
(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iPhone)、多媒体手机、功能性手机,以及低端手机等。
(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:PDA、MID和UMPC设备等,例如iPad。
(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如iPod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。
(4)其他具有数据处理功能的电子装置。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”,不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。