上传文件,避免HTTP OPTIONS

时间:2016-09-21 14:43:57

标签: sapui5 datasnap http-options-method

我有一个OpenuI5 webapp,后面用Delphi Datasnap技术开发。 我使用上传收藏组件来管理字段列表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 个答案:

答案 0 :(得分:3)

这里可能会发生一些混乱。 UI5并未明确显示您所看到的OPTIONS来电,但您的浏览器却是。指示浏览器从您的服务器GET $metadata内省OData服务,并查看它支持的实体和功能。您的OData服务器似乎与您的Web应用程序不是同一台服务器,因此浏览器决定运行飞行前,检查是否可以执行此GET请求。

浏览器正在执行此前飞行作为OPTIONS请求,然后服务器应返回一堆标头,指示允许服务调用。一旦浏览器从服务器收到OK-sign,就会显示UI5要求浏览器进行的实际GET调用。

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

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