Repository navigation
Request Header의 특정 헤더값이 확인이 안되는 경우
왕승재 edited this page Dec 12, 2022
·
2 revisions
작성자 : 왕승재
- 현재 우리 프로젝트는 클라이언트측에서 가지고 있는
user_id와 쿠키의 payload에 있는user_id를 비교하여 같을 경우에만 API 호출이 가능하도록 하는 검증 단계(AuthGuard)가 있다. - 하지만 로컬에서는 문제 없이 request header와 쿠키에서
user_id를 갖고 오지만, 배포 환경에서는 request header에서user_id를 갖고오지 못해 계속 unauthorized 401 에러가 발생 했다. - (역시 한번에 성공적으로 배포하기가 쉽지 않다...)
-
처음에는 클라이언트에서 헤더를 못보내주는 줄 알았다.
-
그 때문에 개발자 도구의 네트워크 탭을 확인하자, request header에 정상적으로 user_id가 있는걸 확인했다.
- 클라이언트측에서 request header를 잘 보내주는걸 확인한 뒤로 의심해볼것은 만악의 근원 CORS 였다.
- 알아본 결과, 예비 요청(Preflight)에 대한 Response Header에 사용되며, 본 요청에서 사용할 수 있는 HTTP Header를 지정하는 Access-Control-Allow-Headers라는 설정이 있었다.
- 그래서 NestJS를 사용하는 우리 프로젝트에서 다음과 같이 적용해봤다.
app.enableCors({ origin: [DEPLOY_HOST, DEPLOY_HOST_WWW], methods: ["GET", "POST", "OPTIONS"], credentials: true, allowedHeaders: "Content-Type, user_id", }); - allowedHeader 설정을 추가해도 역시나 header에서
user_id를 받을 수 없었다.
- 클라이언트에서도 잘 보내고, CORS 문제도 아니면서, 로컬과 배포 서버 환경이 다른 점은 이제 Nginx 밖에 없다는 생각이 들었다.
- 그래서 Nginx와 header의 검색어 조합으로 알아본 결과, 공식 문서에 따르면
_를 포함한 헤더는 자동으로 drop한다는 얘기가 있다. - 곧바로 Nginx 설정에
underscores_in_headers on;을 추가했더니 바로 헤더에user_id가 실리는 모습을 확인 할 수 있었다!!! - Nginx측에서는
_(underscore)를 권장하지 않기 때문에user-id로 바꿀 필요가 있어보인다.
- Date 객체가 내 PC 날짜를 참조하는거였어..?
- FrontEnd 성능 개선기
- Google OAuth 프론트 연계
- HTTPS 보안 등급 A+ 받기
- URL Parameter routing 트러블 슈팅
- Immer.js 도입기
- Request Header의 특정 헤더값이 확인이 안되는 경우
- FrontEnd 성능 개선기 두번째 (네트워크 Waterfall 발생)
- 실시간 알림을 위한 SSE 도입기
- Fitory 검색페이지 개발 & 성능 개선기
- Index를 이용한 DB 성능 개선 일지
- Full Text Search를 이용한 DB 성능 개선 일지
- 22.11.09. Week1 멘토링
- 22.11.11. Week1 마스터클래스 리뷰
- 22.11.16. Week2 멘토링
- 22.11.26. Week3 멘토링
- 22.11.30. Week4 멘토링