web-dev-qa-db-ja.com

Django Python restフレームワーク、リクエストされたChromeのリソースに 'Access-Control-Allow-Origin'ヘッダーが存在せず、firefoxで動作します

同じ問題に関するStackoverflowの投稿をかなり調査して読んでいます。誰も私の問題を解決していません。

私の問題は、コンソールで「... '' Access-Control-Allow-Origin 'header is present on the requested resource ...」というエラーが表示されることです。

使っています:

Chromeバージョン57.0.2987.133 Firefoxバージョン52.0.2

Python 2.7 Django 1.11a1

AngularJS

MAMPを使用して、フロントエンドAngularスタッフ、およびDjangoサーバーをバックエンドスタッフに提供します。

私のDjango設定では、corsミドルウェアを含めて、ホワイトリストのアプローチとすべてをtrueに設定することの両方を試しました。

MIDDLEWARE = [

    'Django.middleware.security.SecurityMiddleware',
    'Django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'Django.middleware.common.CommonMiddleware',
    'Django.middleware.csrf.CsrfViewMiddleware',
    'Django.contrib.auth.middleware.AuthenticationMiddleware',
    'Django.contrib.messages.middleware.MessageMiddleware',
    'Django.middleware.clickjacking.XFrameOptionsMiddleware',

]

CORS_Origin_ALLOW_ALL = True

Googleでchromeまだこのエラーが表示されます:

localhost /:1 XMLHttpRequestは{my endpoint url}をロードできません。 {my endpoint url}から{my endpoint url with a}へのリダイレクトがCORSポリシーによってブロックされました: 'Access-Control-Allow-Origin'ヘッダーが要求されたリソースにありません。したがって、Origin {requesting url}はアクセスを許可されていません。

Firefoxで適切に動作しますが、Googleクロムで動作しない理由がわかりません。他の種類のブラウザは試したことがありません。どんな助けでも大歓迎です、ありがとう。

14
SPatrick

Cors-headersパッケージをインストールします

pip install Django-cors-headers

インストール済みのアプリに追加します

INSTALLED_APPS = (

    ...
    'corsheaders',
    ...
)

MIDDLEWAREに追加リストの最初に追加することを忘れないでください

MIDDLEWARE = [  

    'corsheaders.middleware.CorsMiddleware',
    'Django.middleware.common.CommonMiddleware',
    ...
]

アプリをインストールする前に、誰でもアクセスできるようにこの構成を配置してください

CORS_Origin_ALLOW_ALL=True

または、ヒットのリストを作成します

CORS_Origin_WHITELIST = (

    'google.com',
    'hostname.example.com',
    'localhost:8000',
    '127.0.0.1:9000'
)
30
Clevison Luiz

最初にリクエストのURLを確認してください。vue-resourceを使用するときにこの問題が発生しました。次に、末尾またはURLに「/」がありません。

12
zxt077

必ず127.0.0.1 NOT localhostを使用してください。localhostを使用すると、ブラウザがIPv6アドレスを検索するか、またはlocalhostを設定して、127.0.0.1で明示的に/etc/hostsに設定します。

1
Pay C.

chrome参照。CORSToggle appをchromeにインストールするか、WebコードをnginxまたはApacheにデプロイしてからchromeを使用できます。

0
cece

おそらく、ミドルウェアをどのように呼び出しているかを調べる必要があります。それらが正しい順序にない場合、このエラーがスローされる可能性があります。 'Django.middleware.security.SecurityMiddleware''corsheaders.middleware.CorsMiddleware'の下にプッシュする必要があるようです。また、コードにもCORS_ALLOW_CREDENTIALS = Trueを追加する必要があるようです。

お役に立てれば。

0
Pansul Bhatt