2. 웹개발/Error모음

[400 Bad Request] - Header Or Cookie Too Large 해결방법

갓대희 2024. 4. 12. 19:54
728x90

※ 실제 사용자 입장(싸이트 담당자가 아닌)인 경우 간단하게 브라우저의 쿠키만 지워줘도 문제가 해결 된다! 

 - 이번 내용은 사이트 담당자 입장에서 해당 문제를 어떻게 방지할 지에 대한 내용을 다루려고 한다.

 - 브라우저에서 쿠키 삭제하는방법도 혹시몰라 남겨 둔다.

 

ex) 크롬

 - 크롬 실행 > 우측 상단 점3개 아이콘 클릭 > 설정 클릭

 

 - 좌측 메뉴 "개인 정보 및 보안" 클릭 > "인터넷 사용 기록 삭제" 클릭

 

 - 개별 사이트별로삭제 할 수도 있지만, 본 글의 목표가 아니므로 전체 삭제하는 방법만남겨 둔다.

 

1. 에러 현상 확인

 - 고객 브라우저에서 간헐적으로 이미지가 잘 보이지 않는 현상이 접수 되었다.

 

 - 해당 이미지의 url을 치고 들어가면 다음과 같은 메세지를 볼 수 있다.

 

2. 에러 발생 원인

 

 - 로그 분석시 client_header_buffer_size 부족함을 확인할 수 있었다.

 - 우리의 경우 이미지 CDN 웹서버가 Nginx로 되어 있었고, 다음 설정값이 Default 설정으로 되어 있었다.

client_header_buffer_size 1k;
large_client_header_buffers 4 8k;

 

1) client_header_buffer_size : 일반적으로 요청되는 request에 대한 버퍼 크기 지정
2) large_client_header_buffers : 위의 용량을 오버 하는 요청에 대해 처리할 버퍼 크기 지정

 - 8kb 앞에 적힌 숫자 4는 8kb 버퍼를 4개 만든다는 뜻 이다.  (최대 4개까지 처리할수 있다)

 

ex) 우리의 경우 위 설정 중 "large_client_header_buffers" 사이즈를 오버하는 요청의 경우 에러가 발생 하였다. 

 - 위 이미지의 Request Header내 Cookie가 무지막지하게 긴 것을 확인 할 수 있었다. 

 

3. 해결 방법

 

 - 위에 서의 2가지 설정을 변경하여 수정 가능 하다.

1) client_header_buffer_size : 일반적으로 요청되는 request에 대한 버퍼 크기 지정
2) large_client_header_buffers : 위의 용량을 오버 하는 요청에 대해 처리할 버퍼 크기 지정

 

Case1) client_header_buffer_size 를 늘린다.

ex) client_header_buffer_size 1k; >>>> 32k

 - 대부분의 요청은 32k를 넘지 않을텐데 너무 과하게 버퍼를 늘린상황이 될 수 있다. ( 서버 자원 낭비 )

 - 즉 비효율적이니 권장하지 않는다.

 

Case2) large_client_header_buffers 를 늘린다.

ex) large_client_header_buffers 4 8k; >>>> 32k

 - 일반적인 요청의 헤더는 1kb 버퍼로 처리, 그것보다 큰 요청은 32k 버퍼로 처리하는 것 이므로 위의 경우보다 효율적이다.

 

※ 참고 Nginx 몇가지 설정
 - client_body_buffer_size : 클라이언트 버퍼사이즈로 주로 FORM에서 POST액션으로 NGINX에 보내는 크기
 -  client_header_buffer_size : 클라이언트 헤더 버퍼사이즈 (보통 1K로 설정)
 -  client_max_body_size : 클라이언트 요청(request)에 허용된 최대 크기. 만약 최대크기를 초과하면 nginx는 413 에러를 만듬
 -  large_client_header_buffers: 클라이언트 헤더 최대 개수 및 크기
 -  http2_max_field_size: 압축된 요청 헤더 필드의 최대 크기 제한
 -  http2_max_field_size: 압축 해제 후 전체 요청 헤더 목록의 최대 크기 제한

300x250