HTTP 헤더에 밑줄을 사용하지 마세요.
서버는 조직의 리소스를 관리합니다. 사용자가 누구인지 알려주는 권한 부여 토큰 외에도 사용자가 액세스하려는 조직 리소스를 식별하는 또 다른 토큰을 추가했습니다. 사용자는 여러 조직에 속할 수 있으므로 이 접근 방식을 따르기로 결정했습니다.
헤더의 이름은 ORG_API_KEY였습니다. 스테이징 환경은 Heroku였습니다. AWS Elastic Beanstalk 프로덕션 서버에 배포될 때까지 모든 것이 완벽하게 작동했습니다. 계속 401 오류(api_key 누락)가 발생했습니다.
몇 시간 동안 디버깅한 후 Nginx를 리버스 프록시로 실행하는 Elastic Beanstalk가 기본적으로 Nginx 옵션
underscores_in_headers
이 꺼져 있음을 발견했습니다(Nginx의 기본값임). 왠지 Heroku와 내가 함께 작업한 다른 서버에서는 이 옵션이 켜져 있어서 눈치채지 못했습니다.이제
.ebextensions
구성을 사용하여 이 옵션을 켜거나 헤더를 수정하고 밑줄을 대시로 변경하는 것이 선호의 문제였습니다. 확실히 하기 위해 두 가지 접근 방식을 모두 시도했는데 모두 효과가 있었습니다.curl --HEADER "ORG_API_KEY: some-random-token" # won't work
curl --HEADER "ORG-API-KEY: some-random-token" # works fine
Nginx 구성을 사용하여 이 옵션을 활성화하려면 다음 폴더로 이동하거나 이 폴더에서 종료되지 않는 경우 하나를 생성해야 합니다
.ebextensions > nginx > conf.d
. 구성 파일이 있어야 합니다(myconfig.conf 또는 .conf 확장자). 요청 크기를 늘리는 데 사용하는 구성 파일이 이미 있으므로 새 줄을 추가했습니다. 내 구성은 이제 다음과 같습니다.client_max_body_size 20M;
underscores_in_headers on;
밑줄을 사용하는 것은 HTTP 표준에 따라 유효합니다. Nginx는 다음과 같이 말했습니다.
This is done in order to prevent ambiguities when mapping headers to CGI variables as both dashes and underscores are mapped to underscores during that process.
그 이유는 타당하므로 밑줄 허용 옵션을 켜는 대신 밑줄을 대시로 변경하는 헤더를 수정했습니다. 나는 버그가 마음에 들지 않았지만 배우는 것을 즐겼습니다. 어떤 다른 서버 구성에 대해 배웠습니까?
Reference
이 문제에 관하여(HTTP 헤더에 밑줄을 사용하지 마세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/thesameeric/dont-use-underscores-in-your-http-headers-gfp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)