上传文件避免HTTP选项

问题描述:

我有一个OpenuI5 web应用程序与backand德尔福Datasnap技术开发。 我使用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上传文件避免HTTP选项

我想实现这些解决方案之一:由组件

  1. 发送HTTP POST不发送HTTP
  2. 之前选项来管理由服务器的DataSnap的HTTP POST调用
  3. 使用POST,但抑制自动发送选项调用由组件发送我的文档与Base64编码

解决方案是什么?

对于这里实际发生的事情可能会有些混淆。 UI5并不明确地位于您看到的OPTIONS调用之后,但您的浏览器是。浏览器被指示从您的服务器GET$metadata反思OData服务,并查看它支持哪些实体和功能。看起来您的OData服务器与您的Web应用程序不是同一台服务器,因此浏览器决定运行预先的飞行,以检查是否可以执行此GET请求。

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

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

或者,你将不得不支持CORS调用制成,这意味着你将不得不支持OPTIONS方法和必须从正在运行的OData服务的服务器返回所谓CORS标头(Access-Control-Allow-Origin等)。

+0

很好解释!另外检查wikipedia:https://en.wikipedia.org/wiki/Cross-origin_resource_sharing –