【问题标题】:has been blocked by CORS policy: Request header field x-xhr-logon is not allowed by Access-Control-Allow-Headers in preflight response已被 CORS 策略阻止:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 x-xhr-logon
【发布时间】:2019-02-05 13:00:16
【问题描述】:

我正在尝试在 sap ui5 中使用外部 restful web 服务。当我在 fiori 启动板中使用相同的内容时,它会在 cosole 中引发以下错误,并且磁贴应用程序中没有数据。我怎么能克服呢?我查看了许多与此相关的博客,但没有得到任何帮助。

错误: 从源 'url2' 访问 XMLHttpRequest 在 'https://api.myjson.com/bins/ijyy2' 已被 CORS 策略阻止:在预检响应中 Access-Control-Allow-Headers 不允许请求标头字段 x-xhr-logon。

注意:url2= https://sapmobile.mycompanyname.com 只不过是我们的 fiori 启动板网址。

【问题讨论】:

  • 您的客户端代码正在发送x-xhr-logon 请求标头,但远程端点当前并未说这是允许的标头之一。您需要让您的代码停止发送该请求标头,或者接收端必须使用Access-Control-Allow-Headers 响应标头进行响应,该标头将此x-xhr-logon 列为允许的。 (理论上这是两个选项;哪个是适合您情况的“正确”选项,您必须弄清楚 - 我们不知道该标题是否必要/是否有任何目的。)
  • 我检查了下面的博客,但无法指定在服务器中编写第一个代码点的位置。 blogs.sap.com/2017/10/01/…

标签: sapui5 sap-fiori


【解决方案1】:

这是一个已知的 Fiori Launchpad 问题。有一个文件abap.js 覆盖了XMLHttpRequest 的默认send 方法。

如果您将外部 API 添加为 SAP Cloud Platform 中的新目标(或在本地环境中使用 Web Dispatcher),则不会再有 CORS 调用,因此不会再出现 CORS 问题。

如果您想要一个纯 JavaScript 解决方案,您可以使用两个函数恢复原始实现。将这些添加到您的控制器中。

在访问您的外部 API 之前立即调用以下命令

_overrideRequestPrototype: function () {
    if (!XMLHttpRequest._SAP_ENHANCED) {
        return;
    }
    this.__send = XMLHttpRequest.prototype.send;
    XMLHttpRequest.prototype.send = function (oBody) {
        let oChannel = {};
        this._checkEventSubscriptions();
        try {
            oChannel = this._channel;
            this._saveParams(oBody);
            this._send(oBody);
            if (oChannel) {
                oChannel.sent();
            }
        } catch (oError) {
            if (oChannel) {
                oChannel["catch"](oError);
            } else {
                throw oError;
            }
        }
    };
}

调用后,使用以下函数恢复SAP代码:

_restoreRequestPrototype: function () {
    if (!XMLHttpRequest._SAP_ENHANCED) {
        return;
    }
    XMLHttpRequest.prototype.send = this.__send;
}

【讨论】:

  • 嗨,马克,感谢您的回复。我收到预期的令牌构建时间错误。我的 ajx 调用在 oninit 函数中。请建议如何进行。
  • 复制代码时似乎出现语法错误。
  • 要我分享代码吗?请告诉我。
  • 是的,请分享您的代码。请使用类似 gist.github.com
  • 嗨 MArc.. 你可以在这个 url 中找到我的代码(Ztabledemo.zip):github.com/rkmishra2703/RK-
猜你喜欢
  • 2020-10-31
  • 2019-09-16
  • 2021-08-06
  • 2020-02-27
  • 1970-01-01
  • 2020-03-02
  • 2021-08-24
  • 2021-12-24
  • 2016-05-15
相关资源
最近更新 更多