上传文件避免 HTTP OPTIONS

Upload file avoiding HTTP OPTIONS

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

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

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

解决方法是什么?

这里实际发生的事情可能有点混乱。 UI5 并未明确支持您所看到的 OPTIONS 调用,但您的浏览器支持。指示浏览器从您的服务器 GET $metadata 内省 OData 服务并查看它支持哪些实体和功能。看来你的OData服务器和你的web应用不是同一个服务器,所以浏览器决定运行一个pre-flight,检查是否可以执行这个GET请求。

浏览器将此 pre-flight 作为 OPTIONS 请求执行,然后服务器应该 return 一堆 headers 表明服务调用被允许。一旦浏览器从服务器接收到 OK-sign,UI5 要求浏览器进行的实际 GET 调用就开始了。

您 运行ning 遇到的问题与 CORS 有关,并且对于 web-apps 来说非常常见,他们的服务 运行ning 在与应用程序不同的服务器上.最常见的解决方案是代理服务器上 运行ning 和 web-app 的服务,这样就好像该服务是来自同一台服务器的 运行ning 一样。在这种情况下,浏览器不会 运行 此 pre-flight CORS 检查。

或者,您必须支持正在进行的 CORS 调用,这意味着您必须支持 OPTIONS 方法并且必须 return so-called CORS headers(Access-Control-Allow-Origin 等)来自 运行OData 服务的服务器。