Postman에서 Request 보낼시 cors error
- 현재 상황
현재 나는 교내 프로그래밍 동아리에 소속되어 django를 배우고 있다.
게시판 기능을 만들고 있는데 리드 친구가 api의 90%이상은 개발 완료한 상태이고 나는 이 중
마지막 post의 reply 부분의 feature를 할당 받은 상태이다.
하지만 작성한 코드를 웹브라우저 url로만 확인하기에는 불가능했다.
그래서 postman으로 진행을 하려고 맘을 먹었다.
리드 친구의 코드를 참고하여 감으로 코딩을 하고 postman으로 로컬을 확인하고자 한다.
- postman fork
기존 공동 collection에 작성되어 있는 게시판 API를 fork 해와서 아래와 같이 '로컬 테스트'라는 이름으로 바꿨다.
- variables 수정
기존 배포된 URL에 대해서 설정되어 있던 baseUrl을 내 로컬호스트 주소로 수정해주었다.
- Request 오류
하지만 계속해서 / 부터 요청에 대한 응답이 안 왔다.
확인해보니 cors request rejected라는 오류이다.
현재 장고에서는
분명 POSTMAN에서는 GET으로 보냈지만 OPTIONS 메소드로 받아오는 것을 확인할 수 있었다.
- corsheader 설치
❯ pipenv install corsheaders
Installing corsheaders...
Error: An error occurred while installing corsheaders!
Error text:
ERROR: Could not find a version that satisfies the requirement corsheaders (from -r /var/folders/2c/9kmqb7_57v9f0sqjsv755xjc0000gn/T/pipenv-gfrz93ep-requirements/pipenv-f_ry_rv2-requirement.txt (line 1)) (from versions: none)
ERROR: No matching distribution found for corsheaders (from -r /var/folders/2c/9kmqb7_57v9f0sqjsv755xjc0000gn/T/pipenv-gfrz93ep-requirements/pipenv-f_ry_rv2-requirement.txt (line 1))
설치가 지속해서 오류가 났다.
알고 보니 패키지 이름이 다른 것을 리드 친구를 통해 알아냈다.
❯ pipenv install django-cors-headers
# 설치 성공
참고: https://pypi.org/project/django-cors-headers/
참고: https://dzone.com/articles/how-to-fix-django-cors-error
# settings.py
ALLOWED_HOSTS = ['*']
CORS_REPLACE_HTTPS_REFERER = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = False
SESSION_ENGINE = "django.contrib.sessions.backends.file"
# Application definition
INSTALLED_APPS = [
'board',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders'
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
]
하지만 여전히 해결이 안되었다.....
참고: https://github.com/wafflestudio/rookies/issues/103
나와 비슷한 고민을 했던 분이 계셔서 해당 글을 참고하였고 우선적으로 처리가 급했기에 POSTMAN Agent를 설치해주었다.
❯ brew install --cask postman
정상적으로 작동하는 것이 확인되었다.
cors에 대해서 예전부터 들었던 기억이 있는데 잘 나지 않는다.
이후에 공부해서 정리해봐야겠다.