ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION 에러
안녕하세요 🐸
오늘은 일하는데 갑작스러운 에러를 맟닥뜨렸습니다.
사용자가 파일 다운로드를 시도하는데 다운로드가 안된다고…!!
원인
ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION
에러의 원인은 서버의 RESPONSE에 중복된 헤더 입니다.
중복된 헤더를 발생시키는 요소로는 개발자의 잘못된 헤더 설정도 있겠지만 가장 흔히 발생하는 원인은 파일명에 쉼표가 있는 경우 입니다.
일반적으로 파일명에 쉼표가 있을 때 발생하는 경우가 많아서 인터넷에서도 이러한 사례를 쉽게 찾을 수 있었습니다.
저의 사례 또한 마찬가지로 파일명에 쉼표가 있어 헤더가 잘못해석되어 발생했습니다.
크롬은 쉼표를 구분자로 해석하기 때문에 크롬에서 흔히 발생합니다.
그리고 크롬과 같은 엔진을 사용하는 익스플로러 엣지에서도 동일합니다.
사실 크롬 안쓰는 사람이 더 없어서…
했갈리지 않아야 할 부분은 헤더의 중복되어 발생하는 에러고 이를 발생시킨 원인이 파일명에 있는 쉼표인거니까,
파일명에 쉼표만 없애면 해결되겠네! 에서 끝나는게 아니라 파일명에 쉼표를 없애서 헤더의 중복을 없애면 문제가 해결이라고 생각하는게 더 좋습니다
해결 방법
두 가지 방법을 사용할 수 있습니다.
저는 테스트 해봤을 때 두 방법 모두 유효했지만 일부 개발자분들은 해결되지 않는 경우도 있으니 시도를 해보고 적절한 방법을 사용하는게 좋아보입니다.
파일명 인코딩하기
파일명을 UTF-8로 인코딩 하는 방법입니다.
쉼표는 %2C
로 치환되어서 정상적으로 하나의 헤더로 인식됩니다.
사실 그냥 데이터에서 쉼표를 공백으로 바꿔버려도 해결은 됩니다 🤣
헤더 값을 더블쿼터(“”) 로 감싸기
더블쿼터로 묶인 데이터를 하나의 데이터로 인식하게 만들기 때문에 하나의 헤더로 인식하게 됩니다.
다만 이 방법은 일부 환경에서는 유효하지 않다는 사례가 있었습니다.
후기
개발자도구에서 요청 status를 확인 할 생각을 못하고 냅다 response 부터 본 탓에 원인 파악에 시간이 걸렸습니다.
문득 개발자도구에서는 응답의 헤더부터 잘못된거라서 RESPONSE를 확인할 수 없어서 조금 당황했었습니다.
처음에는 서버로 요청이 아예 안간줄 알고서 로그를 뜯어봐야하나 걱정도했는데요. 모니터링 프로그램을 확인해보니 서버로 요청은 가길래 이상하다 싶더라구요.
그래서 네트워크의 status 를 확인해보니 ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION
라는 에러가 발생하고 있었습니다.