CORS 도메인 간 문제를 해결하는 Django의 방법

도메인 간 문제의 원인

Cross-Origin Resource Sharing(CORS)도메인 간 문제는 selenium , playweight 프런트 엔드 및 백 엔드 프로젝트와 자동화된 테스트 코드에서 자주 발생합니다. python request, curl, postman 비브라우저 코드를 사용하여 요청을 보낼 때는 이 문제가 발생하지 않습니다.
이는 브라우저의 동일 출처 정책 때문입니다. 잠재적인 악성 파일을 격리하고 비뚤어진 공격을 방어하기 위해 브라우저는 동일한 소스에서 로드된 문서 또는 스크립트가 다른 소스의 리소스와 상호 작용하지 못하도록 제한합니다.
요청을 보내기 위해 사용할 때 Ajax, Axios현재 호스트의 도메인 이름과 포트 번호가 서비스 프로그램의 도메인 이름 포트 번호와 동일하지 않으면 도메인 간 CORS오류가 발생하고 응답을 받을 수 없습니다. 스크립트가 로컬 브라우저에서 실행 중이고 django 서비스도 http://localhost:8000에서 실행 중이며 CORS 오류가 계속 발생합니다.

CORSdjango 서버 측에서 문제를 해결하는 두 가지 방법이 있습니다.

해결 방법 1: 사용자 지정 미들웨어를 통해 요청 헤더 수정

myproject/app/ 디렉터리에서 새 cors.py 파일을 만듭니다.

class CorsMiddleware(object):
    def process_response(self, req, resp):
        response["Access-Control-Allow-Origin"] = "*"
        return response

이 클래스는 각 django 요청에 Access-Control-Allow-Origin:* 매개변수를 추가하는 데 사용되지만 미들웨어 클래스 목록에 추가해야 합니다. 먼저 settings.py에서

MIDDLEWARE_CLASSES = (
    #...
    'app.CorsMiddleware' 
)

이 사용자 지정 미들웨어 클래스를 통해 더 많은 헤더 매개 변수를 추가할 수도 있습니다.

솔루션 2: django-cors-headers 라이브러리를 통해 구현

타사 라이브러리 django-cors-headers 라이브러리를 통해 구현되며 단계는 다음과 같습니다.

1) 설치

pip install django-cors-headers

2) settings.py 구성 파일 수정

응용 프로그램 목록에 추가

INSTALLED_APPS = (
    ##...
    'corsheaders'
)

미들웨어 목록 추가corsheaders.middleware.CorsMiddleware

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    ......

그런 다음 모든 도메인 액세스를 허용하도록 다음 구성을 추가합니다.

CORS_ORIGIN_ALLOW_ALL = True

또는 특정 도메인이 액세스하도록 허용

CORS_ORIGIN_ALLOW_ALL = False
# 允许域名加入白名单
CORS_ORIGIN_WHITELIST = (
    'http//:localhost:8000',
)

설명하다

테스트 환경에서는 CORS 문제를 피하기 위해 모든 도메인에 접근을 허용할 수 있으며, 프로덕션 환경에서는 일반적으로 프런트엔드와 백엔드 분리 프로젝트를 동일한 도메인에 배포해야 합니다.크로스 도메인이 정말 필요한 경우 추가 프런트 엔드 도메인 이름을 화이트리스트
구성 CORS_ORIGIN_WHITELIST항목으로 지정하면 다른 도메인에서 액세스가 금지됩니다.

Supongo que te gusta

Origin blog.csdn.net/captain5339/article/details/131583701
Recomendado
Clasificación