2016-01-10 12 views
5

が、私は地元のDjangoのセットアップを持って働いていない私は私のsettings.pydjango-cors-headersとをインストールしたlocal apache running on http://localservernameDjangoのローカルホストCORS</p> <p><code>Django Rest Framework</code>次のように

、私はしましたセットアップ私を

CORS_ORIGIN_WHITELIST = (
    'http://localhost', 
    'localservername', 
    'http://localservername', 
    '127.0.0.1' 
) 


MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware', 
'corsheaders.middleware.CorsMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
) 

ただし、から配信されているAPIにアクセスするたびに210エラーが発生します。 CORS_ORIGIN_ALLOW_ALL = Trueと設定した場合、APIは正常に動作しますが、サーバー側のデータは非常に安全です。

これを修正するにはどうすればよいですか?

+0

'django.middleware.commonの直前に' corsheaders.middleware.CorsMiddleware'を追加しましたか?あなたの 'INSTALLED_APPS'にはCommonMiddlewareと' corsheaders'がありますか? –

+0

@DaniilRyzhkov、はい私は私の質問にそれを追加します – Newtt

+0

@HamletHakobyan、私の要求は 'localservername'から' localhost:8000'にありますので問題はありません – Newtt

答えて

2

によると、同じポート、スキーム、およびホストからの要求が同じ起点とみなされる必要があります。ここでは、サーバーの1つがポート80にあり、もう1つが8080にあります。

発信元は、スキーム、ホスト、およびポートのURLによって定義されます。一般に と言えば、異なる起点から検索された文書は、お互いに から隔離されています。たとえば、 http://example.com/doc.htmlから取得したドキュメントが、https://example.com/target.htmlから取得した のドキュメントのDOMにアクセスしようとすると、ユーザーエージェントは にアクセスを許可しません。最初のドキュメント(http: example.com、80)の由来は2番目の文書 (https、example.com、443)の起点と一致しません。

0

私は同じ問題を抱えていました。 django-cors-headers -codeを閲覧することで私のミスは、以下の通りであったが見つかりました:

完全CORSヘッダは、この(通知スキーマとホスト名)のように見えますが:

Access-Control-Allow-Origin: https://example.com 

CORS_ORIGIN_WHITELIST設定は比較形式でそれを望んでいます正規表現ホワイトリストは、に対してそれを比較している間のみ、ホストであるOrigin -header、(おそらくポート)

def origin_found_in_white_lists(self, origin, url): 
    return (
     url.netloc in conf.CORS_ORIGIN_WHITELIST or 
     (origin == 'null' and origin in conf.CORS_ORIGIN_WHITELIST) or 
     self.regex_domain_match(origin) 
    ) 

urlparse.netlocdocs)にOrigin -headerを入力してください。

だから、正しい設定は、(セットアップマニュアルを正しく述べているが、きちんと説明しないで、例として)次のようになります。あなたはあなたのAPIは、と話をしたくない場合は問題になる可能性が

CORS_ORIGIN_WHITELIST = (
    'example.com', 
) 

ウェブサイトの非セキュアなhttpバージョンです。その場合はRegExを使用してください。

また、トラブルシューティング中に一致が見つからない場合、CORSヘッダーが完全に存在しないことがわかりました。つまり、ヘッダーがないということは、ミドルウェアの完全な誤動作を示すものではなく、誤った設定である可能性があります。

関連する問題