HTTP 헤더에 밑줄을 사용하지 마세요.

1798 단어 herokunginxawsnode
최근에 저는 Node.js로 구축되고 AWS Elastic Beanstalk에서 호스팅되는 API 서버에서 작업하고 있습니다.

서버는 조직의 리소스를 관리합니다. 사용자가 누구인지 알려주는 권한 부여 토큰 외에도 사용자가 액세스하려는 조직 리소스를 식별하는 또 다른 토큰을 추가했습니다. 사용자는 여러 조직에 속할 수 있으므로 이 접근 방식을 따르기로 결정했습니다.

헤더의 이름은 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.



그 이유는 타당하므로 밑줄 허용 옵션을 켜는 대신 밑줄을 대시로 변경하는 헤더를 수정했습니다. 나는 버그가 마음에 들지 않았지만 배우는 것을 즐겼습니다. 어떤 다른 서버 구성에 대해 배웠습니까?

좋은 웹페이지 즐겨찾기