由于来自 https://services.odata.org 的服务不支持 CORS,加载“$metadata”失败
Loading of `$metadata` fails due service from https://services.odata.org not supporting CORS
我正在尝试使用 Northwind R/W OData 服务 link:https://services.odata.org/V3/OData/OData.svc/
。
本地测试运行良好。但是没有使用proxy或者mock server,服务报如下错误:
NetworkError: 501 Not Implemented
控制器代码:
// 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"
}
});
由于您使用的是 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 中禁用安全标志以进行开发 使用 .
更新 (2021-06-16): OData V4 TripPin service, a reverse proxy server is no longer required as the host now supports CORS.
原回答:
问题是 services from odata.org currently don't support CORS. To learn about what CORS is in general, see Same origin Policy and CORS (Cross-origin resource sharing).
简而言之,您的情况是这样的:
- 客户端发送预检请求,使用方法
OPTIONS
,查看服务器允许什么样的请求。
- 服务器响应它不理解
OPTIONS
请求。
- 客户报告“OPTIONS ... 501(未实施)”。
规避此问题的方法之一是使用可在 SAP Business Technology Platform(又名 SAP BTP,以前称为 SAP Cloud)中配置的反向代理服务器平台或 SCP)以及在本地开发的情况下使用 UI5 工具。
有关如何解决此问题的详细文档。请仔细阅读主题 Request Fails Due to Same-Origin Policy (Cross-Origin Resource Sharing - CORS) 并根据您的开发环境应用更改。
如果在本地使用 UI5 工具,我建议 ui5-middleware-simpleproxy
。
public 代理服务 cors-anywhere.herokuapp.com
一开始似乎可以工作,但它初步会按顺序发送带有预检请求的每个请求(即每次两个请求),因为默认情况下,该服务器 不 缓存预检请求。src Also the number of requests per period is limited there, so you will get blocked when sending several requests too many times. → UPDATE: cors-anywhere.herokuapp.com
is officially no longer usable. See the announcement: https://github.com/Rob--W/cors-anywhere/issues/301
我正在尝试使用 Northwind R/W OData 服务 link:https://services.odata.org/V3/OData/OData.svc/
。
本地测试运行良好。但是没有使用proxy或者mock server,服务报如下错误:
NetworkError: 501 Not Implemented
控制器代码:
// 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"
}
});
由于您使用的是 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 中禁用安全标志以进行开发 使用
更新 (2021-06-16): OData V4 TripPin service, a reverse proxy server is no longer required as the host now supports CORS.
原回答:
问题是 services from odata.org currently don't support CORS. To learn about what CORS is in general, see Same origin Policy and CORS (Cross-origin resource sharing).
简而言之,您的情况是这样的:
- 客户端发送预检请求,使用方法
OPTIONS
,查看服务器允许什么样的请求。 - 服务器响应它不理解
OPTIONS
请求。 - 客户报告“OPTIONS ... 501(未实施)”。
规避此问题的方法之一是使用可在 SAP Business Technology Platform(又名 SAP BTP,以前称为 SAP Cloud)中配置的反向代理服务器平台或 SCP)以及在本地开发的情况下使用 UI5 工具。
有关如何解决此问题的详细文档。请仔细阅读主题 Request Fails Due to Same-Origin Policy (Cross-Origin Resource Sharing - CORS) 并根据您的开发环境应用更改。
如果在本地使用 UI5 工具,我建议 ui5-middleware-simpleproxy
。
public 代理服务 → UPDATE: cors-anywhere.herokuapp.com
一开始似乎可以工作,但它初步会按顺序发送带有预检请求的每个请求(即每次两个请求),因为默认情况下,该服务器 不 缓存预检请求。src Also the number of requests per period is limited there, so you will get blocked when sending several requests too many times.cors-anywhere.herokuapp.com
is officially no longer usable. See the announcement: https://github.com/Rob--W/cors-anywhere/issues/301