431 Request Header Fields Too Large

아재발자·2024년 8월 10일
1

[431] Request Header Fields Too Large 에러는 요청된 HTTP Header의 크기가 웹 서버가 정의한 크기보다 클 경우 응답되는 Http Response Status Code 중 하나입니다.

참고!
비슷한 에러로는 [413] Content Too Large가 있습니다.
다만 NodeJS 기준으로 431 에러와 413 에러를 처리하는 레이어가 다릅니다.

웹 서버는 왜 HTTP Header Size를 제한하는걸까?

기본적으로 HTTP Header 명세에서는 Header 크기에 대해 명시가 되어있지 않습니다. 그럼에도 불구하고 웹 서버가 Header 크기를 제한하는 이유는 무엇일까요?

기본적으로 Client와 웹 서버의 연결은 TCP 방식으로 통신이 이루어집니다. Client가 웹 서버로 HTTP 요청 패킷을 보내면 웹 서버는 해당 패킷을 파싱하여 처리를 하게 됩니다.

이 과정에서 파싱된 패킷 데이터는 웹 서버가 처리할 수 있는 구조로 변환되고, 이 요청에 대해 응답을 할 때 까지 파싱된 패킷 데이터는 웹 서버 메모리에 올라가게 되는데요. 이 때 Client가 요청한 데이터의 크기에 제한이 없다면, 매우 큰 헤더의 요청을 받았을 때 서버의 리소스가 고갈되어 처리 성능이 저하되거나 서비스가 불가능한 상태로 확장될 수 있습니다.

웹 서버는 이러한 문제를 방지하고자 기본적으로 적절한 크기로 HTTP Header의 크기를 제한하고 있습니다.

참고!
웹 서버마다 기본으로 설정된 HTTP Header Size가 다릅니다. :)

일반적으로 431 에러가 발생하는 케이스

HTTP/1.x

HTTP/1.x에서 정의된 Header Field 목록은 rfc2616에서 확인할 수 있습니다.

일반적으로 HTTP/1.x에서 웹 사이트를 이용할 때 영향을 주는 대표적인 헤더 필드는 아래와 같습니다.

  1. Cookie 크기 증가
  2. Referer 길이 증가
  3. UserAgent 길이 증가
  4. Authorization 헤더의 길이 증가
  5. X-Forwarded-For 길이 증가

HTTP/2

HTTP/2로 버전이 올라가면서 변경된 부분은 rfc7540 - HTTP Request/Response Exchange에서 자세히 확인할 수 있습니다.

일반적으로 HTTP/2에서 웹 사이트를 이용할 때 영향을 주는 대표적인 헤더 필드는 아래와 같습니다.

  • HTTP/1.x 필드 길이 증가
  • Pseudo-Header 길이 증가 (:authority, :path)

Pseudo-Header

Pseudo-Header Fields의 자세한 내용은 아래의 링크에서 확인해주세요.
https://datatracker.ietf.org/doc/html/rfc7540#section-8.1.2.3

HTTP/2에서 Pseudo-Header가 신규로 추가되었는데, 이 헤더는 일반 헤더 블록의 앞에 위치하기 때문에 HTTP Header 크기에 영향을 줍니다.

8.1.2.1. Pseudo-Header Fields
All pseudo-header fields MUST appear in the header block before regular header fields.


참고 문서

profile
안녕하세요. 아재 개발자입니다. 공부한 내용을 기록하고 잘못된 부분에 대해서 조언을 받기 위해 velog를 시작했습니다. :)

1개의 댓글

comment-user-thumbnail
2024년 8월 13일

유익한 내용이네요, 나중에 413 에러 포스트도 기대하겠습니다 :)

답글 달기