400 Bad Request는 일반적인 클라이언트 오류입니다. 서버는 요청에 문제가 있다고 판단해 처리를 거부합니다. 잘못된 구문, 유효하지 않은 메시지 프레이밍, 기만적인 요청 라우팅, 잘못된 Host 헤더, 유효하지 않은 쿼리 매개변수, 파싱할 수 없는 본문 등이 원인입니다. 클라이언트는 같은 요청을 그대로 반복해서는 안 됩니다.
많은 서버가 더 구체적인 전용 코드가 있는 문제에도 400을 사용합니다. 예를 들어 nginx는 헤더가 버퍼 크기를 넘으면 “400 Bad Request: Request Header Or Cookie Too Large”로 응답하는데, 이 경우에는 431이 더 정확합니다. 또한 많은 API가 422로 응답할 수 있는 유효성 검사 오류에도 400을 반환합니다.
실제 원인은 대개 응답 본문에서 가장 잘 확인할 수 있습니다.
응답 예시
HTTP/1.1 400 Bad Request
Date: Fri, 06 Nov 2026 10:15:32 GMT
Server: nginx
Content-Type: text/html
Content-Length: 217
Connection: close
<html>
<head><title>400 Request Header Or Cookie Too Large</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>Request Header Or Cookie Too Large</center>
<hr><center>nginx</center>
</body>
</html> SEO 및 리디렉션 검사
검색엔진은 400을 다른 4xx 오류와 같이 취급합니다. 해당 URL은 색인되지 않으며, 이미 색인된 URL이 400을 반환하기 시작하면 색인에서 삭제됩니다. 크롤러는 쿠키 없이 작고 표준적인 요청을 보내므로, 크롤러만 400을 받는다면 대개 URL에 들어 있는 특이한 문자나 방화벽 규칙이 원인입니다. 리디렉션 검사에서 체인 중간에 400이 있다면, 리디렉션이 이중 인코딩된 문자나 깨진 쿼리 문자열 등이 포함된 잘못된 URL을 만들었다는 뜻인 경우가 많습니다.
주요 원인과 사용 사례
- 쿠키가 너무 많거나 너무 큽니다. 사이트의 쿠키를 삭제하거나, nginx에서
large_client_header_buffers값을 늘리세요. - 인코딩되지 않은 공백, 깨진 퍼센트 인코딩, 유효하지 않은
Host헤더 등 잘못된 형식의 URL입니다. - JSON이 유효하지 않거나 필수 매개변수가 빠진 API 요청입니다.
- HTTPS 포트로 일반 HTTP 요청을 보냈습니다. nginx는 이를 “The plain HTTP request was sent to HTTPS port”로 보고합니다.