云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

网站建设_百度云优惠_三重好礼

小七 141 0

跨源资源共享(CORS)是一个W3C规范,允许从浏览器进行跨域通信。通过构建在AJAX/XMLHttpRequest对象之上,CORS允许开发人员使用与相同域请求相同的编码范式。CORS已经开始在当今基于web和云的应用程序中扮演越来越重要的角色,而我们的web应用程序正朝着跨域系统/数据集成的方向发展。支持COR的Web应用程序服务器使干净的体系结构成为可能,而无需使用反向代理或其他形式的中间层。

大多数SAP应用程序位于SAP NetWeaver应用程序服务器平台之上,许多Web应用程序从该平台检索数据。如果需要在使用AJAX调用的web浏览器中进行数据检索,则绕过web浏览器的同源策略的传统方法是在web服务器和SAP NetWeaver应用程序服务器前面设置一个反向代理,以便它们在web浏览器中显示为共享同一主机名。虽然这可能是一个方便的解决方法,但它不仅在维护解决方案方面具有更高的TCO,而且还会对SSL、身份验证和单点登录选项产生影响。

但事实上,从技术上讲,可以配置SAP NetWeaver应用服务器以支持CORS,因此,返利app下载,您的web应用程序景观可以大大简化如下:

诀窍很简单。为NetWeaver的ICM组件添加重写规则,以便它返回必要的CORS头。

首先,配置NetWeaver应用程序服务器的默认配置文件,启用HTTP重写并指向操作/重写文件。在下面的示例中,操作文件是重写.txt系统配置文件文件夹中的文件。

在操作文件中,保持以下设置以插入必要的CORS头。确保将web服务器的URL指定为Access Control Allow Origin标头的值。

重新启动NetWeaver应用程序服务器,以上设置将启用CORS支持,并允许来自三台web服务器的CORS请求。

*前提条件:NetWeaver系统的内核修补程序级别必须高于以下级别,才能使上述设置生效:

内核7.49 PL 315

打开每个应用程序的CORS

以上设置设置将为整个NetWeaver应用程序服务器启用CORS支持。如果您只想为特定的应用程序/路径启用CORS,您可以创建如下重写规则:

使用上述设置,什么是云服务器,只有/app1/path1/*路径下的应用程序才启用CORS。您甚至可以微调允许的HTTP请求方法,以反映应用程序支持的请求方法。很酷吧?

处理有状态应用程序

许多SAP web应用程序实现"URL重写"以实现有状态会话管理。在这种情况下,德国云服务器,web浏览器/JavaScript应该动态地向URL添加一个长会话ID,例如,对/sap/bw/ina的请求在身份验证后会变成如下内容:

/sap(cz1tsuqlm2fbtk9ojtnhqlc3ntbfqjc1xzawjtnhmfr2wnaxdzonvu2gzodrhbk9yduf5atrdyzd4wwwzrdfezmlbjri1bvfq=)/bw/ina/GetResponse

红色部分是在Web浏览器和NetWeaver应用程序服务器之间的整个对话框中,动态会话ID在请求之间不断变化。这是通过两个HTTP响应头完成的:

web浏览器中的JavaScript需要能够获取上述HTTP响应头的值,以便根据NetWeaver应用服务器的指令构造包含会话ID的动态url。由于这些头来自CORS响应,我们需要将它们添加到Access Control Expose headers列表中。

我们还需要微调条件表达式,以便它继续匹配应用程序的路径,即使会话ID被注入其中。我们将在这里利用强大的正则表达式支持。下面是一个示例规则文件:

处理飞行前CORS请求

以上设置仅适用于简单的CORS请求。简单CORS请求是CORS请求,它只使用HTTP请求方法GET、POST、HEAD,并携带一组有限的HTTP头。如果CORS请求使用任何其他HTTP请求方法,例如DELETE或PUT,或者如果它在上面提到的有限集合头之外携带HTTP头,则该请求必须以飞行前请求开头,该请求本质上是具有特定CORS头的HTTP OPTIONS请求。不幸的是,由于上述设置,飞行前CORS请求将失败。如果您想更深入地了解简单的CORS请求和飞行前请求,物联网技术与应用,请参阅此处的更多详细信息。

但为什么?我们已经配置了ICM来发出所有CORS响应头,为什么飞行前请求失败了?问题在于如何构造飞行前请求。根据CORS规范,飞行前请求不能携带任何用户凭证。由于NetWeaver上的大多数应用程序都需要用户身份验证,飞行前请求将收到"HTTP 401 Unauthorized"(HTTP 401未经授权)错误消息,因此请求将失败。

解决此问题的方法有多种,但在不引入任何额外基础设施组件的情况下解决此问题的最干净的解决方案如下:

这样,飞行前请求将根据请求的应用程序获得所需的CORS响应头,而不会由于身份验证错误而被拒绝。

对于步骤1,您可以在SICF中创建一个虚拟节点,并将其命名为"CORS"。使用处理程序CL\u HTTP\u EXT\u PING为节点提供服务,该处理程序存在于任何NetWeaver ABAP系统上,智能物联,产生的通信量最小。

确保该节点允许匿名访问。