Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过ajaxjavascript调用sapsoapwebservices–;查看跨域策略_Ajax_Web Services_Soap_Cors_Crossdomain.xml - Fatal编程技术网

通过ajaxjavascript调用sapsoapwebservices–;查看跨域策略

通过ajaxjavascript调用sapsoapwebservices–;查看跨域策略,ajax,web-services,soap,cors,crossdomain.xml,Ajax,Web Services,Soap,Cors,Crossdomain.xml,我正在尝试开发一个web应用程序,它应该使用Ajax/Javascript向sapwebservice提交一个SOAP请求(POST)。之后,SAP系统中的相应数据应显示在web应用程序上 然而,我现在面临着跨域问题,因为web应用程序和系统位于不同的域上。如果我调整IE(顺便说一下IE11)安全设置,应用程序将正常运行 但我想避免这种情况,因为该应用程序不仅会在我的计算机上使用,而且会被许多其他用户使用。重要的是,它支持所有浏览器和移动设备,而无需调整安全设置 在默认安全级别下,应用程序不再适

我正在尝试开发一个web应用程序,它应该使用Ajax/Javascript向sapwebservice提交一个SOAP请求(POST)。之后,SAP系统中的相应数据应显示在web应用程序上

然而,我现在面临着跨域问题,因为web应用程序和系统位于不同的域上。如果我调整IE(顺便说一下IE11)安全设置,应用程序将正常运行

但我想避免这种情况,因为该应用程序不仅会在我的计算机上使用,而且会被许多其他用户使用。重要的是,它支持所有浏览器和移动设备,而无需调整安全设置

在默认安全级别下,应用程序不再适用于我,我会收到错误消息“XMLHttpRequest:Access denied”,因为显然需要CORS和CORS Preflight

为了寻找解决方案,我首先偶然发现了JSONP。但由于这是标准的SAP Web服务,并且数据是通过WSDL以XML形式(而不是json)传输的,所以我认为这种方法不适用。此外,我使用“POST”方法。在JSONP中,只支持“GET”方法

我还希望避免通过另一台服务器或存储在SAP系统和web应用程序之间的代理来解决问题,因为我不了解与SAP系统相关的主题,也不知道如何实现这一点

对我来说,CORS似乎是个不错的选择。 从请求头,我可以推断以下属性被发送到SAP系统的主机:

选项:使用Web应用程序的域

访问控制请求方法:值为“POST”-方法

访问控制请求头:带有条目“内容类型,接受”

要求:带有“选项”

请参阅请求标头:

如果我正确理解CORS,SAP系统现在必须适当响应此请求以允许交叉访问。我尝试过使用“crossdomain.xml”——类似于flash或adobe中的文件,我在SAP系统域的根目录中提供了这些文件。通过路径“SAP domain/crossdomain.xml”调用,xml文件如下所示:

<?xml version="1.0" ?>
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <site-control permitted-cross-domain-policies="all"/>
  <allow-access-from domain="*" to-ports="*" secure="false"/>
  <allow-http-request-headers-from domain="*" headers="*" secure="false"/>
</cross-domain-policy>

我应该如何将CORS权限附加到SAP中的响应头?此解决方案是否仅适用于adobe或flash?我可以在我的案例中也使用它,或者我可以在webservice设置(SOAMANAGER)中绑定适当的权限,例如在绑定中

SAP端代理的外观如何?这是一种选择吗?如果是,您对实施有何建议

我将非常感谢有用的提示和答案,特别是因为我目前没有其他想法,如何解决这个跨领域的问题

提前感谢您的帮助

以下是我的请求片段:

`//jQuery.support.cors = true;
$(document).ready(function () {
var wsUrl = "http://BCSW-SAP016.xxxxxx.net:8000/sap/bc/srt/rfc/sap/z_agbs_webservice_xxxx/001/service/binding";
var soapRequest ='<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">'
                    + '<soap:Header/>'
                    + '<soap:Body>'
                        + '<urn:ZAgbsWebserviceComTab>'
                            + '<Aosuser>'+aOSUser+'</Aosuser>'
                            + '<Asystem>'+aSystem+'</Asystem>'
                            + '<EvTabelle>'
                            + '</EvTabelle>'
                        + '</urn:ZAgbsWebserviceComTab>'
                    + '</soap:Body>'
                + '</soap:Envelope>';
  $.ajax({
    type: "POST",
    url: wsUrl,
    contentType: "application/soap+xml", // charset=UTF-8", //
    action: "urn:sap-com:document:sap:soap:functions:mc-style:Z_AGBS_WEBSERVICE_xxxx:ZAgbsWebserviceComTabRequest",
    dataType: "xml",
    data: soapRequest,
    success: processSuccess,
    error: processError
  });
});
`//jQuery.support.cors=true;
$(文档).ready(函数(){
var wsUrl=”http://BCSW-SAP016.xxxxxx.net:8000/sap/bc/srt/rfc/sap/z_agbs_webservice_xxxx/001/service/binding";
var soapRequest=''
+ ''
+ ''
+ ''
+“+aOSUser+”
+''+系统+''
+ ''
+ ''
+ ''
+ ''
+ '';
$.ajax({
类型:“POST”,
url:wsUrl,
contentType:“应用程序/soap+xml”,//字符集=UTF-8“//
操作:“urn:sapcom:document:sap:soap:functions:mc-style:Z_AGBS_WEBSERVICE_xxxx:ZAgbsWebserviceComTabRequest”,
数据类型:“xml”,
数据:soapRequest,
成功:成功,,
错误:processError
});
});
看看这个

您需要添加一个自定义处理程序来设置“Access Control Allow Origin”头,然后在SICF中分配头

看看这个

您需要添加一个自定义处理程序来设置“Access Control Allow Origin”头,然后在SICF中分配头

有关运行的应用程序,请参阅请求标题:和响应标题:有关标准安全设置,请参阅错误消息:有关运行的应用程序,请参阅请求标题:和响应标题:有关标准安全设置,请参阅错误消息。