0

ほとんどのクライアントで問題なく動作する ASP.NET アプリケーションでフラッシュ アップローダを使用しています。ただし、組織内でプロキシ サーバーをセットアップしている場合、アップロードが断続的に失敗し、クラッシュが発生します。問題を調査したところ、これはプロキシ サーバーによって開始された "407 認証が必要です" 要求が原因であることがわかりました。HTTPS で実行されている Web サイト全体を切り替えてみたところ、この問題は解決したように見えますが、アプリケーション全体で他の 500 エラーが発生しました。一時的な修正として、サイトを HTTP で実行したまま、アップロード コンポーネントに対してのみ HTTPS を有効にしました。これで問題は解決したようです。

しかし、恒久的な修正を期待しているので、Flash コードでプロキシ例外 (407) を処理し、HTTPS 呼び出しで再発行しようと考えています (ただし、これが許可されているかどうかはわかりません)。HTTPStatusEvent を処理しようとすると、フィドラーを使用して正しく例外が発生しましたが、HTTPS 経由でアップロード リクエストを強制しても、それ以上のリクエストは送信されません。私がやっている以下のコードサンプルを見つけてください(ActionScript Flex 3)

_file.addEventListener(HTTPStatusEvent.HTTP_STATUS ,OnHttpError);

プライベート関数 OnHttpError(event:HTTPStatusEvent):void{ if (event.status==407){ Upload(true); } else{ HandleExceptions("Http エラー: ",event.status,""); } this.dispatchEvent(イベント); } public function Upload(enableHttps:Boolean=false):void{ _uploading = true; _bytesUploaded = 0;

        var uploadURLTemp:String = _uploadUrl;
        if(enableHttps==true){
            uploadURLTemp = uploadURLTemp.replace("http://","https://");

        }
        _file.upload(new URLRequest(uploadURLTemp));


    }

_file オブジェクトは FileReference オブジェクトで、_uploadURL はサーバーのアップロード ハンドラ URL です。これを行うことが許可されているかどうか、またはこれを処理するためのより良い方法があるかどうかはわかりません。

どんな考えやアイデアも大歓迎です

よろしく

シェリン

4

1 に答える 1

0

発生しているエラーに関しては、これは Flash の問題ではなく、バックエンドの問題のように聞こえることに同意します。

一般的に言えば、フラッシュで HTTPS 呼び出しを実行する上で最も難しい部分は、crossdomain.xml ポリシーの設定と読み込みです。これらの https 呼び出しが機能している場合は、すべてが適切に構成されていると想定しています。

ただし、まだ考慮していない場合は、ここで考慮すべきことがいくつかあります。

  • .SWF が HTTP 経由で読み込まれたときに HTTPS でサーバーに接続するには、crossdomain.xml が必要になる場合があります。
  • 保護されたコンテンツが secure.mywebsite.com などのサブドメインでホストされている場合、SWF が www.mywebsite.com にアクセスするための適切な権限を持っていない(crossdomain.xml が存在しないか、正しく構成されていない)か、またはその逆の可能性があります。

しかし、恒久的な修正を期待しているので、Flash コードでプロキシ例外 (407) を処理し、HTTPS 呼び出しで再発行しようと考えています (ただし、これが許可されているかどうかはわかりません)。

有効で適切に構成された crossdomain.xml ファイルが SWF によってロードされている限り、http、https、さらにはソケット接続を必要に応じて呼び出したり再呼び出ししたりできます。

あなたにとって HTTP は不安定に見えるので、プロキシの問題が解決するまでは、単に https を使用する方が簡単なのかもしれません。

于 2013-08-14T01:40:29.263 に答える