如何在Javascript(Chrome)中禁用同源策略

如何在Javascript(Chrome)中禁用同源策略,javascript,cors,sapui5,Javascript,Cors,Sapui5,我正在设计一个SAP UI5应用程序,它从不同的服务器获取数据。 目前,我在进行OData调用时遇到了一个跨源错误,解决方法是在Chrome中禁用web安全性。但是我想要一个合适的解决方案(一段代码),可以用来避免这个错误 请注意,我无法对OData服务器进行任何更改。您必须使用代理servlet来解决CORS问题。 在manifest.json文件的config json中,添加指向odata服务或数据提供商的链接,例如: "config": { "oData

我正在设计一个SAP UI5应用程序,它从不同的服务器获取数据。 目前,我在进行OData调用时遇到了一个跨源错误,解决方法是在Chrome中禁用web安全性。但是我想要一个合适的解决方案(一段代码),可以用来避免这个错误


请注意,我无法对OData服务器进行任何更改。

您必须使用代理servlet来解决CORS问题。 在manifest.json文件的config json中,添加指向odata服务或数据提供商的链接,例如:

"config": {
  "oDataRemote": "http://exampleService.com/sap/opu/odata/sap/<ServiceName>",
  "oDataProxyRemote": "proxy/sap/opu/odata/sap/<ServiceName>",
}
确定uri后,在components.js中启动odata模型:

var oODataModel = new sap.ui.model.odata.ODataModel(sServiceUrl, mParameters);
this.setModel(oODataModel, "oDataModel");
在WEB-INF文件夹中,需要将以下servlet添加到WEB.xml中:

<!-- ============================================================== -->
<!-- UI5 proxy servlet -->
<!-- ============================================================== -->

<servlet>
    <servlet-name>SimpleProxyServlet</servlet-name>
    <servlet-class>com.sap.ui5.proxy.SimpleProxyServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>SimpleProxyServlet</servlet-name>
    <url-pattern>/proxy/*</url-pattern>
</servlet-mapping>
<context-param>
    <param-name>com.sap.ui5.proxy.REMOTE_LOCATION</param-name>
    <param-value>{protocol}://{host name}:{port number}</param-value>
</context-param> 

SimpleProxyServlet
com.sap.ui5.proxy.SimpleProxyServlet
SimpleProxyServlet
/代理/*
com.sap.ui5.proxy.REMOTE\u位置
{协议}://{主机名}:{端口号}
简单代理servlet仅用于测试目的。如果您的生产环境需要这个,那么您需要一个成熟的代理servlet。我建议使用反向代理(例如ApacheHTTP服务器),将所有web和应用程序服务器放在一个域中


您还可以查看SAP提供的示例。您应该在服务器端设置反向代理。你应该通过这个调用外部url。所有的电话都应该通过这个

无法在javascript中禁用同源策略。您必须设置正确的响应标题。请看更多的解释,你不能-这是一件非常好的事情。你问错问题了。您应该询问如何避免它,答案是要么在响应中返回CORS头,要么返回JSONP。如果您不能执行这两种操作,那么您将不得不在服务器端而不是客户端JSNo上发出请求——这是另一种方式。CORS头需要在响应中,而不是请求CORS必须由远程方启用——在本例中,远程方将是您的“OData服务器”。没有配置访问权限-没有CORS。不确定我的评论是被忽略还是不被读取。。
<!-- ============================================================== -->
<!-- UI5 proxy servlet -->
<!-- ============================================================== -->

<servlet>
    <servlet-name>SimpleProxyServlet</servlet-name>
    <servlet-class>com.sap.ui5.proxy.SimpleProxyServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>SimpleProxyServlet</servlet-name>
    <url-pattern>/proxy/*</url-pattern>
</servlet-mapping>
<context-param>
    <param-name>com.sap.ui5.proxy.REMOTE_LOCATION</param-name>
    <param-value>{protocol}://{host name}:{port number}</param-value>
</context-param>