1

明確にするために編集:

python/Flask REST-API を使用して、ExtJS アプリに (基本認証を使用して) 安全なエンドポイントを提供します。CORS が有効になっています。Safari でのすべてのテストで、すべてが見事に機能していました。他のブラウザ (IE、Chrome、Firefox) をテストすることにしました。その結果、401 エラーが発生し続け、ログイン ダイアログが表示されません。

次のブログ投稿http://mortoray.com/2014/04/09/allowing-unlimited-access-with-cors/を見つけました。これは、次のコードのチャンクを追加して、すべてのエンドポイントですべてのヘッダーが確実にカバーされるようにすることを提案しています。

@app.after_request
def add_cors(resp):
    """ Ensure all responses have the CORS headers. This ensures any failures are also accessible
        by the client. """
    resp.headers['Access-Control-Allow-Origin'] = request.headers.get('Origin','*')
    resp.headers['Access-Control-Allow-Credentials'] = 'true'
    resp.headers['Access-Control-Allow-Methods'] = 'POST, OPTIONS, GET'
    resp.headers['Access-Control-Allow-Headers'] = request.headers.get(
        'Access-Control-Request-Headers', 'Authorization' )
    # set low for debugging
    if app.debug:
        resp.headers['Access-Control-Max-Age'] = '1'
    return resp

これが機能することを期待してAPIコードに追加しましたが、違いはないようです。

API は mod_wsgi を使用して Apache 経由でホストされ、すべての認証はディレクティブを使用して wsgi アプリに渡されWSGIPassAuthorization Onます。

言うまでもなく、私は少し混乱しています。401 エラーが検出された場合、常にログイン ダイアログが表示されるべきではありませんか?

4

1 に答える 1

0

ExtJS アプリと API アプリを同じサーバーに移動するだけで済みました (ExtJS アプリには Apache mod_alias を使用し、Flask アプリには mod_wsgi の WSGIScriptAlias ディレクティブを使用します)。魅力のように機能し、CORS の問題はありません。Chrome のひどい解決策にもかかわらず、Firefox の修正はないと思いますし、IE についても調べていません。私には確かにもっと良いことがあります。

于 2015-07-31T15:03:28.493 に答える