角度のあるフロントエンドを備えたフラスコサーバーを使用しています。最近まで、ローカルでプロジェクトを実行していましたが、問題はありませんでした。
プロジェクトをリモート サーバーに移動したところ、次のエラーが発生しました。何が間違っているのかわかりません:
私のエラー:
XMLHttpRequest はhttp://ec2-..../api/loginStatus/を読み込めません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン ' http://localhost:8100 ' へのアクセスは許可されません。応答の HTTP ステータス コードは 503 でした。
フラスコサーバー側コードのスニペット (応答にヘッダーを追加している場所を以下に示します):
@app.after_request
def after_request(response):
response.headers.add('Access-Control-Allow-Origin','http://localhost:8100')
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE')
response.headers.add('Access-Control-Allow-Credentials', 'true')
return response
フロントエンドの angularjs で、restangular メソッドと $http メソッドの両方を使用しています。
メイン モジュールの .config に次の行を追加しました。
.config(['RestangularProvider', '$stateProvider', '$urlRouterProvider','$httpProvider',
function(RestangularProvider, $stateProvider, $urlRouterProvider,$httpProvider) {
//$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.headers.common['Access-Control-Allow-Origin'] = "http://localhost:8100";
$httpProvider.defaults.withCredentials = true;
$httpProvider.defaults.headers.common = 'Content-Type: application/json';
delete $httpProvider.defaults.headers.common['X-Requested-With'];
誰かがここで私を助けることができますか? 私は多くの資料を参照しましたが、何が間違っているのかわかりません。
PS: サーバーで 200 のステータス メッセージを受信しています。したがって、エラーはサーバー側ではなくフロントエンドにあると想定しています。私が間違っている場合は修正してください
よろしく、スニル
編集
こんにちは、私は問題を解決しました。@Mathijs Segers と @Hassan Mehmood の意見に感謝します。
nginx の構成に問題があり、サーバーが使用できなくなったことが判明しました。
まず、flask バックエンド用に作成されたシンボリック リンクに問題がありました (/home/username の git リポジトリを介してサーバー側を実行し、/var/www/sitename.com にシンボリック リンクを作成しています)。
また、1 秒間に送信できるリクエストの数を調整していた (ユーザーは 2 秒ごとに 1 つしか送信できなかった) ため、503 エラーが発生しました。
修正した後、私が立てた元のコードは正常に機能しました。