0

我有一个使用 Delphi Datasnap 技术开发的 OpenuI5 webapp。我使用 Upload Collection 组件来管理字段列表https://openui5.hana.ondemand.com/explored.html#/entity/sap.m.UploadCollection/properties 该组件,当我要上传文件时,发送一个 Http OPTIONS 调用以检索可从服务器调用的 http 方法列表。问题是 Datasnap 服务器不处理 http 选项并返回 501 错误代码http://docwiki.embarcadero.com/RADStudio/Seattle/en/DataSnap_REST

我正在尝试实现以下解决方案之一:

  1. 组件发送 http POST 之前不发送 http OPTIONS
  2. 通过服务器 Datasnap 管理 http POST 调用
  3. 使用 POST 以 Base64 编码发送我的文档,但禁止组件自动发送 OPTIONS 调用

解决办法是什么?

4

1 回答 1

3

关于这里实际发生的事情可能会有些混乱。UI5 并没有显式地支持OPTIONS您所看到的调用,但您的浏览器却是。浏览器被指示GET$metadata您的服务器内省 OData 服务并查看它支持哪些实体和功能。您的 OData 服务器似乎与您的 Web 应用程序不是同一台服务器,因此浏览器决定运行预检,以检查是否可以执行此 GET 请求。

浏览器正在执行这个预检作为OPTIONS请求,然后服务器应该返回一堆表明允许服务调用的标头。一旦浏览器接收到来自服务器的 OK 信号GET,UI5 要求浏览器进行的实际调用就会进行。

您遇到的问题与 CORS 有关,并且对于其服务在与应用程序不同的服务器上运行的 Web 应用程序来说非常常见。最常见的解决方案是在运行 Web 应用程序的服务器上代理服务,以使服务看起来好像从同一台服务器运行。在这种情况下,浏览器不会运行此飞行前 CORS 检查。

或者,您必须支持正在进行的 CORS 调用,这意味着您必须支持该方法并且必须从运行 OData 服务的服务器OPTIONS返回所谓的 CORS 标头(等​​)。Access-Control-Allow-Origin

于 2016-09-24T20:09:58.917 回答