本发明涉及跨域资源访问技术领域,尤指一种自动支持跨域访问的方法及装置。
背景技术:
现有客户端发起http请求,如涉及到跨域资源访问,则需要客户端实现跨域请求配置,由于客户端对不同的跨域请求存在差异性,客户端需要兼容多种配置场景,增加其配置复杂度,且由于浏览器内核版本间差异,导致客户端的跨域请求配置存在浏览器兼容性问题。
技术实现要素:
为了解决上述问题,本发明实施例提供一种自动支持跨域访问的方法,所述方法包括:
判断接收到的跨域访问请求的类型,根据所述跨域访问请求的类型对所述跨域访问请求进行设置;
所述根据所述跨域访问请求的类型对所述跨域访问请求进行设置包括:当所述跨域访问请求为简单请求时,在所述简单请求的首部加入http请求站点字段;或当所述跨域访问请求为非简单请求时,对所述非简单请求进行首部解析,为所述非简单请求的首部设置资源访问域http请求站点字段及访问方法,并配置所述非简单请求的首部以使其支持多种http请求首部报文;
接收根据经过设置的简单请求或非简单请求返回的响应报文。
可选的,在本发明一实施例中,所述根据所述跨域访问请求的类型对所述跨域访问请求进行设置还包括:配置所述非简单请求的身份凭证。
可选的,在本发明一实施例中,所述接收根据经过设置的简单请求或非简单请求返回的响应报文包括:经过设置的简单请求被服务器验证通过后,接收服务器返回的包含域请求允许标识的响应报文。
可选的,在本发明一实施例中,所述接收根据经过设置的简单请求或非简单请求返回的响应报文包括:经过设置的非简单请求被服务器验证通过后,接收服务器返回的包含跨域资源共享信息的响应报文,以使经过设置的非简单请求的首部包含http请求站点字段;包含http请求站点字段的非简单请求被服务器验证通过后,接收服务器返回的包含域请求允许标识的响应报文。
本发明实施例还提供一种自动支持跨域访问的装置,所述装置包括:
判断模块,用于判断接收到的跨域访问请求的类型,根据所述跨域访问请求的类型对所述跨域访问请求进行设置;
设置模块,用于所述根据所述跨域访问请求的类型对所述跨域访问请求进行设置包括:当所述跨域访问请求为简单请求时,在所述简单请求的首部加入http请求站点字段;或当所述跨域访问请求为非简单请求时,对所述非简单请求进行首部解析,为所述非简单请求的首部设置资源访问域http请求站点字段及访问方法,并配置所述非简单请求的首部以使其支持多种http请求首部报文;
接收模块,用于接收根据经过设置的简单请求或非简单请求返回的响应报文。
可选的,在本发明一实施例中,所述设置模块还包括:配置单元,用于配置所述非简单请求的身份凭证。
可选的,在本发明一实施例中,所述接收模块包括:第一接收单元,用于经过设置的简单请求被服务器验证通过后,接收服务器返回的包含域请求允许标识的响应报文。
可选的,在本发明一实施例中,所述接收模块包括:第二接收单元,用于经过设置的非简单请求被服务器验证通过后,接收服务器返回的包含跨域资源共享信息的响应报文,以使经过设置的非简单请求的首部包含http请求站点字段;第三接收单元,用于包含http请求站点字段的非简单请求被服务器验证通过后,接收服务器返回的包含域请求允许标识的响应报文。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
判断接收到的跨域访问请求的类型,根据所述跨域访问请求的类型对所述跨域访问请求进行设置;
所述根据所述跨域访问请求的类型对所述跨域访问请求进行设置包括:当所述跨域访问请求为简单请求时,在所述简单请求的首部加入http请求站点字段;或当所述跨域访问请求为非简单请求时,对所述非简单请求进行首部解析,为所述非简单请求的首部设置资源访问域http请求站点字段及访问方法,并配置所述非简单请求的首部以使其支持多种http请求首部报文;
接收根据经过设置的简单请求或非简单请求返回的响应报文。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
判断接收到的跨域访问请求的类型,根据所述跨域访问请求的类型对所述跨域访问请求进行设置;
所述根据所述跨域访问请求的类型对所述跨域访问请求进行设置包括:当所述跨域访问请求为简单请求时,在所述简单请求的首部加入http请求站点字段;或当所述跨域访问请求为非简单请求时,对所述非简单请求进行首部解析,为所述非简单请求的首部设置资源访问域http请求站点字段及访问方法,并配置所述非简单请求的首部以使其支持多种http请求首部报文;
接收根据经过设置的简单请求或非简单请求返回的响应报文。
本发明可达到客户端无需任何配置,即可通过本发明实现cors请求的技术效果,同时也具有支持客户端自定义策略,覆盖默认配置、兼容性和扩展性良好等优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一种自动支持跨域访问的方法的流程图;
图2为本发明实施例中应用自动支持跨域访问方法的系统的结构示意图;
图3为本发明实施例中应用自动支持跨域访问方法的系统的系统流程示意图;
图4为本发明实施例中应用自动支持跨域访问方法的系统的工作流程图;
图5为本发明实施例一种自动支持跨域访问的装置的结构示意图。
具体实施方式
本发明实施例提供一种自动支持跨域访问的方法及装置。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
跨域问题源自浏览器的同源策略,是浏览器为防止csrf(cross-siterequestforgery,跨站请求伪造)攻击和xss(crosssitescripting,跨站脚本攻击)攻击而内嵌的安全策略,所谓同源是指以下三者都相同:协议、域名及端口。例如,当前页面的地址为http://www.example.com/dir/page.html,其协议是http,域名是www.example.com,端口是默认端口80,那么对于以下资源地址其同源策略判定结果为:
http://www.example.com/dir2/other.html:同源;
http://example.com/dir/other.html:不同源(域名不同);
http://v2.www.example.com/dir/other.html:不同源(域名不同);
http://www.example.com:81/dir/other.html不同源(端口不同)。
浏览器一旦发现非同源请求(跨域请求),就会自动添加一些附加首部信息,有时还会附加一次请求,当同源策略无法满足时,操作将被浏览器阻止。解决同源问题的标准方案是跨域资源共享cors(cross-originresourcesharing,跨域资源共享)。
如图1所示为本发明实施例一种自动支持跨域访问的方法的流程图,图中所示方法包括:
步骤s1,判断接收到的跨域访问请求的类型,根据所述跨域访问请求的类型对所述跨域访问请求进行设置;
步骤s2,所述根据所述跨域访问请求的类型对所述跨域访问请求进行设置包括:当所述跨域访问请求为简单请求时,在所述简单请求的首部加入http请求站点字段;或当所述跨域访问请求为非简单请求时,对所述非简单请求进行首部解析,为所述非简单请求的首部设置资源访问域http请求站点字段及访问方法,并配置所述非简单请求的首部以使其支持多种http请求首部报文;
步骤s3,接收根据经过设置的简单请求或非简单请求返回的响应报文。
作为本发明的一个实施例,根据所述跨域访问请求的类型对所述跨域访问请求进行设置还包括:配置所述非简单请求的身份凭证。
作为本发明的一个实施例,接收根据经过设置的简单请求或非简单请求返回的响应报文包括:经过设置的简单请求被服务器验证通过后,接收服务器返回的包含域请求允许标识的响应报文。
作为本发明的一个实施例,接收根据经过设置的简单请求或非简单请求返回的响应报文包括:经过设置的非简单请求被服务器验证通过后,接收服务器返回的包含跨域资源共享信息的响应报文,以使经过设置的非简单请求的首部包含http请求站点字段;包含http请求站点字段的非简单请求被服务器验证通过后,接收服务器返回的包含域请求允许标识的响应报文。
具体的,本发明自动支持跨域访问的方法的实施可参见应用自动支持跨域访问的方法的系统的实施。
在本发明一具体实施例中,如图2所示为本发明实施例中应用自动支持跨域访问方法的系统的结构示意图,图中所示系统包括:
资源访问域配置模块:通过对资源访问域origin(http请求站点)的自定义配置,指定了允许访问该资源的外域。对于不需要携带身份凭证的请求,服务器可以指定该字段的值为通配符,表示允许来自所有域的请求。
访问方法配置模块:通过对访问方法的自定义配置,用于预检请求的响应。其指明了实际请求所允许使用的http方法。系统默认配置为:head,get,post,put,delete,patch,options。
身份凭证配置模块:通过对身份凭证的自定义配置,在预检请求的响应时,它指定了实际的请求是否可以使用credentials(身份凭证)。
header请求配置模块:通过对header请求的自定义配置,指明了实际请求中允许携带的首部字段。
应用自动支持跨域访问的方法的系统可提供系统默认能力,即客户端无需任何配置,即可通过访问本系统实现cors请求,同时系统也支持客户端自定义策略,可覆盖系统默认配置,兼容性良好、系统健壮性强。
在本实施例中,当客户端发起简单请求访问时,本文提出的跨域访问系统会在请求首部中自动加入origin字段,该字段标明了请求来自哪个源(协议+域名+端口),请求访问对应的服务器会根据这个值确定是否批准这次请求。
http请求报文:
get/corshttp/1.1
origin:http://api.demo.com(跨域访问系统自动添加)
host:api.remote.com
accept-language:en-us
connection:keep-alive
user-agent:mozilla/5.0...
如果服务器未通过请求,会返回一个正常的http响应,但是响应首部中不会包含access-control-allow-origin字段,并且会抛出错误,提示‘access-control-allow-origin’首部在当前请求中不存在。
如果服务器通过请求,则返回一个正常的http响应,并且响应首部中包含access-control-allow-origin字段,如:
http正常响应报文:
access-control-allow-origin:http://api.demo.com(此字段表明服务器对此次请求验证通过)
access-control-allow-credentials:true
access-control-expose-headers:foobar
content-type:text/html;charset=utf-8
在本实施例中,当客户端发起非简单请求时,整个请求过程分为以下2步:
1、预检请求
当客户端发起非简单请求时,本文提出的跨域访问系统会对预检请求做如下自动化设置:
1)首先,本系统的资源访问域配置模块对http请求首部解析,并为其http首部设置资源访问域origin,即其可访问的指定资源域,否则会被识别为非法的cors请求。
2)其次,本系统的访问方法配置模块对http请求首部解析,并为其http首部设置访问方法(head,get,post,put,delete,patch,options),即http请求可支持的访问方法,对于非简单请求是需要支持options方法的,不然无法走到预检请求。本系统默认为其配置options方法,支持预检请求。
3)然后,本系统的header请求配置模块对http请求的允许首部进行设置,配置(authorization,cache-control,content-type,accept,x-requested-with),通过配置支持多种http请求首部报文。
4)最后,本系统的身份凭证配置模块对http请求配置credentials,即支持cookies、认证headers或客户端证书。客户端发起的请求报文中设置的cookies、认证headers或客户端证书等信息,路由经本系统时,无论是简单请求还是非简单请求,均可支持其接收和发送。
预检请求报文
options/corshttp/1.1(跨域访问系统自动添加)
origin:http://api.demo.com(跨域访问系统自动添加)
access-control-request-method:put(跨域访问系统自动添加)
access-control-request-headers:x-custom-header(跨域访问系统自动添加)
host:api.remote.com
accept-language:en-us
connection:keep-alive
user-agent:mozilla/5.0...
经过跨域访问系统处理过的预检请求,对服务器端发起请求时,如果预检未通过,服务端返回一个正常的响应报文,但不包含任何cors相关信息,此时浏览器就会报错。如果预检通过,服务端返回一个包含cors信息的响应报文。
预检正常响应报文:
access-control-allow-origin:http://api.bob.com
access-control-allow-methods:head,get,post,put,delete,patch,options
access-control-allow-headers:x-custom-header
content-type:text/html;charset=utf-8
2、实际请求
预检通过,以后每次浏览器正常的cors请求就都跟简单请求一样,包含origin头信息字段,服务器的回应也包含access-control-allow-origin头信息字段。
实际请求报文:
put/corshttp/1.1
origin:http://api.demo.com
host:api.remote.com
x-custom-header:value
accept-language:en-us
connection:keep-alive
user-agent:mozilla/5.0...
实际响应报文:
access-control-allow-origin:http://api.demo.com
content-type:text/html;charset=utf-8
其中,本发明实施例中应用自动支持跨域访问方法的系统的系统流程示意图如图3所示,本发明实施例中应用自动支持跨域访问方法的系统的工作流程图如图4所示。此外,在以上报文中,access-control-allow-origin:标识允许哪个域的请求,access-control-allow-credentials:标识是否可以请求的响应暴露给页面,access-control-allow-headers:标识允许请求的哪些首部报文,access-control-allow-methods:标识允许请求的哪些方法,access-control-request-method:标识预检请求中的请求方法,access-control-request-headers:标识预检请求中的首部报文。
本发明可达到客户端无需任何配置,即可通过本发明实现cors请求的技术效果,同时也具有支持客户端自定义策略,覆盖默认配置、兼容性和扩展性良好等优点。
如图5所示为本发明实施例一种自动支持跨域访问的装置的结构示意图,图中所示装置包括:
判断模块10,用于判断接收到的跨域访问请求的类型,根据所述跨域访问请求的类型对所述跨域访问请求进行设置;
设置模块20,用于所述根据所述跨域访问请求的类型对所述跨域访问请求进行设置包括:当所述跨域访问请求为简单请求时,在所述简单请求的首部加入http请求站点字段;或当所述跨域访问请求为非简单请求时,对所述非简单请求进行首部解析,为所述非简单请求的首部设置资源访问域http请求站点字段及访问方法,并配置所述非简单请求的首部以使其支持多种http请求首部报文;
接收模块30,用于接收根据经过设置的简单请求或非简单请求返回的响应报文。
作为本发明的一个实施例,设置模块还包括:配置单元,用于配置所述非简单请求的身份凭证。
作为本发明的一个实施例,接收模块包括:第一接收单元,用于经过设置的简单请求被服务器验证通过后,接收服务器返回的包含域请求允许标识的响应报文。
作为本发明的一个实施例,接收模块包括:第二接收单元,用于经过设置的非简单请求被服务器验证通过后,接收服务器返回的包含跨域资源共享信息的响应报文,以使经过设置的非简单请求的首部包含http请求站点字段;第三接收单元,用于包含http请求站点字段的非简单请求被服务器验证通过后,接收服务器返回的包含域请求允许标识的响应报文。
基于与上述一种自动支持跨域访问的方法相同的申请构思,本发明还提供了上述一种自动支持跨域访问的装置。由于该一种自动支持跨域访问的装置解决问题的原理与一种自动支持跨域访问的方法相似,因此该一种自动支持跨域访问的装置的实施可以参见一种自动支持跨域访问的方法的实施,重复之处不再赘述。
本发明可达到客户端无需任何配置,即可通过本发明实现cors请求的技术效果,同时也具有支持客户端自定义策略,覆盖默认配置、兼容性和扩展性良好等优点。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
判断接收到的跨域访问请求的类型,根据所述跨域访问请求的类型对所述跨域访问请求进行设置;
所述根据所述跨域访问请求的类型对所述跨域访问请求进行设置包括:当所述跨域访问请求为简单请求时,在所述简单请求的首部加入http请求站点字段;或当所述跨域访问请求为非简单请求时,对所述非简单请求进行首部解析,为所述非简单请求的首部设置资源访问域http请求站点字段及访问方法,并配置所述非简单请求的首部以使其支持多种http请求首部报文;
接收根据经过设置的简单请求或非简单请求返回的响应报文。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
判断接收到的跨域访问请求的类型,根据所述跨域访问请求的类型对所述跨域访问请求进行设置;
所述根据所述跨域访问请求的类型对所述跨域访问请求进行设置包括:当所述跨域访问请求为简单请求时,在所述简单请求的首部加入http请求站点字段;或当所述跨域访问请求为非简单请求时,对所述非简单请求进行首部解析,为所述非简单请求的首部设置资源访问域http请求站点字段及访问方法,并配置所述非简单请求的首部以使其支持多种http请求首部报文;
接收根据经过设置的简单请求或非简单请求返回的响应报文。
基于与上述一种自动支持跨域访问的方法相同的申请构思,本发明还提供了上述一种计算机设备及一种计算机可读存储介质。由于该一种计算机设备及一种计算机可读存储介质解决问题的原理与一种自动支持跨域访问的方法相似,因此该一种计算机设备及一种计算机可读存储介质的实施可以参见一种自动支持跨域访问的方法的实施,重复之处不再赘述。
本发明可达到客户端无需任何配置,即可通过本发明实现cors请求的技术效果,同时也具有支持客户端自定义策略,覆盖默认配置、兼容性和扩展性良好等优点。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。