2016-09-21 2 views
0

私は、Delphi Datasnap技術で開発されたOpenUI5 Webアプリケーションをバックアップしています。 アップロードコレクションコンポーネントを使用してフィールドのリストを管理する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を実現しようとしているということです。

  1. 送るHTTPを使用しないコンポーネントでのHTTP POSTを送信します
  2. 前OPTIONSは、サーバDatasnapで
  3. して、HTTP POST呼び出しを管理するBase64ではPOSTを使用してコードするが、自動を阻害すると私のドキュメントを送るコンポーネント
でOPTIONSを呼び出す送ります

解決策は何ですか?

答えて

3

ここで実際に何が起こっているのか少し混乱するかもしれません。 UI5は表示されているOPTIONSコールの後ろに明示的には表示されていませんが、ブラウザが表示されます。ブラウザはサーバーからGET$metadataに指示され、ODataサービスをイントロスペクトし、サポートするエンティティおよび機能を確認します。 ODataサーバーはWebアプリケーションと同じサーバーではないようですので、ブラウザーはこのGET要求を実行することができるかどうかを確認するために、事前の飛行を実行することを決定します。

ブラウザはこのプリフライトをOPTIONS要求として実行しており、サーバーはサービスコールが許可されていることを示す一連のヘッダーを返すことになっています。ブラウザがサーバからOKサインを受信すると、実際にGETコールが表示され、UI5がブラウザに確認を求められます。

実行中の問題はCORSと関係があり、アプリケーションとは異なるサーバーでサービスを実行しているWebアプリケーションでは非常に一般的です。最も一般的な解決策は、サービスが同じサーバーから実行されているかのように見えるように、Webアプリケーションを実行しているサーバーでサービスをプロキシすることです。その場合、ブラウザはこの飛行前CORSチェックを実行しません。

また、OPTIONSメソッドをサポートし、ODataサービスを実行しているサーバーからCORSヘッダー(Access-Control-Allow-Originなど)を返さなければならないCORS呼び出しをサポートする必要があります。

+0

非常に説明が良い!さらに、wikipediaをチェックしてください:https://en.wikipedia.org/wiki/Cross-origin_resource_sharing –

関連する問題