【问题标题】:Upload file avoiding HTTP OPTIONS上传文件避免 HTTP 选项
【发布时间】:2016-09-26 15:24:08
【问题描述】:

我有一个使用 Delphi Datasnap 技术开发的 OpenuI5 webapp。 我使用上传集合组件来管理字段列表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 调用

解决办法是什么?

【问题讨论】:

    标签: sapui5 datasnap http-options-method


    【解决方案1】:

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

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 2018-07-27
    • 2018-01-16
    • 2022-12-02
    • 2019-03-25
    • 2013-04-17
    相关资源
    最近更新 更多