4

我正在尝试使用 Northwind R/W OData 服务链接:https://services.odata.org/V3/OData/OData.svc/.

它在本地测试中运行良好。但是不使用代理或模拟服务器,服务会报以下错误:

网络错误:501 未实现

控制器代码:

// ODataModel required from "sap/ui/model/odata/v2/ODataModel"
var oModel = new ODataModel({
  serviceUrl: "https://services.odata.org/V3/OData/OData.svc/",
  headers: {
    DataServiceVersion: "3.0",
    MaxDataServiceVersion: "3.0"
  }
});
4

2 回答 2

4

当您使用 Northwind 时,我相信它仅用于开发。所以你可以利用https://cors-anywhere.herokuapp.com/来访问跨域资源。

var oModel = new ODataModel({ // required from "sap/ui/model/odata/v2/ODataModel"
  serviceUrl: "https://cors-anywhere.herokuapp.com/https://services.odata.org/V2/(S(frik5l2zde0sxh4jiifyhqo4))/OData/OData.svc/"
});

或者另一种方式是禁用 chrome 中的安全标志以进行开发利用SCP 中的目标设置

于 2015-05-19T13:59:02.143 回答
3

更新 (2021-06-16):对于 OData V4 TripPin服务,不再需要反向代理服务器,因为主机现在支持 CORS


原答案:

问题是来自odata.org的服务目前不支持 CORS。要了解 CORS 的一般含义,请参阅同源策略和 CORS(跨源资源共享)

简而言之,这就是您的情况:

  1. 客户端发送预检请求,使用 method OPTIONS,查看服务器允许什么样的请求。
  2. 服务器响应它不理解该OPTIONS请求。
  3. 客户报告“OPTIONS ... 501(未实施)”。

规避此问题的选项之一是使用可以在SAP Business Technology Platform(又名 SAP BTP,以前称为 SAP Cloud Platform 或 SCP)中配置的反向代理服务器,以及在本地情况下使用UI5 Tooling发展。

有关如何解决此问题的大量文档。请浏览主题Request Fails Due to Same-Origin Policy (Cross-Origin Resource Sharing - CORS)并根据您的开发环境应用更改。

如果在本地使用 UI5 工具,我建议使用ui5-middleware-simpleproxy.


公共代理服务cors-anywhere.herokuapp.com一开始似乎可以工作,但它初步发送带有预检请求的每个请求顺序(即每次两个请求),因为预检请求默认情况下被该服务器缓存。src每个周期的请求数量也是有限的,所以当发送多个请求太多次时你会被阻塞。更新: cors-anywhere.herokuapp.com正式不再可用。见公告:https ://github.com/Rob--W/cors-anywhere/issues/301

于 2018-12-21T02:08:30.860 回答