2016-09-21 87 views
0

我有一個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編碼

解決方案是什麼?

回答

3

對於這裏實際發生的事情可能會有些混淆。 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 –