100 Continue 표준
중간 응답: 클라이언트가 Expect: 100-continue 로 알린 본문을 받겠다는 뜻입니다.
흔한 원인 curl 같은 클라이언트가 큰 본문을 올리기 전에 Expect: 100-continue 를 보냅니다.
RFC 9110 15.2.1
Tools / 네트워크
코드(502), 갈래(4xx), 낱말(timeout · 인증서)로 찾습니다.
입력한 값은 브라우저 안에서만 계산하고 서버로 보내지 않습니다.
중간 응답: 클라이언트가 Expect: 100-continue 로 알린 본문을 받겠다는 뜻입니다.
흔한 원인 curl 같은 클라이언트가 큰 본문을 올리기 전에 Expect: 100-continue 를 보냅니다.
RFC 9110 15.2.1
서버가 Upgrade 헤더의 프로토콜로 바꿉니다.
흔한 원인 웹소켓 연결 시작(Upgrade: websocket).
proxy_http_version 1.1 과 Upgrade · Connection 헤더 전달이 필요합니다.RFC 9110 15.2.2
WebDAV 중간 응답: 아직 처리 중이라는 뜻입니다.
흔한 원인 오래 걸리는 WebDAV 작업. 지금은 거의 보이지 않습니다.
RFC 2518
최종 응답 전에 Link 헤더를 먼저 보내 브라우저가 자원을 미리 받게 하는 중간 응답입니다.
흔한 원인 미리 받기 힌트를 보내는 CDN · 서버.
early_hints 지시어로 다룹니다.RFC 8297
재개 가능한 업로드 초안의 임시 등록: 서버가 이 업로드를 이어 받을 수 있다는 뜻입니다.
흔한 원인 재개 가능한 업로드 초안을 구현한 서버.
draft-ietf-httpbis-resumable-upload-05
요청이 성공했습니다.
RFC 9110 15.3.1
새 자원이 만들어졌습니다. 보통 Location 헤더에 주소가 옵니다.
흔한 원인 무언가를 만드는 API 에 POST · PUT.
RFC 9110 15.3.2
처리하겠다고 받았지만 아직 끝나지 않았습니다.
흔한 원인 비동기 작업 · 대기열.
RFC 9110 15.3.3
성공이지만 중간의 변환 프록시가 원 서버의 200 응답 내용을 바꿨습니다.
흔한 원인 응답을 고쳐 쓰는 프록시.
RFC 9110 15.3.4
성공, 본문 없음.
흔한 원인 DELETE · PUT API, CORS 사전 요청(OPTIONS) 응답.
RFC 9110 15.3.5
성공. 클라이언트는 화면(예: 폼)을 초기화해야 합니다.
흔한 원인 드묾.
RFC 9110 15.3.6
Range 로 요청한 바이트 범위만 보냅니다.
흔한 원인 동영상 재생, 이어 받기(curl -C -).
RFC 9110 15.3.7
WebDAV: 본문에 여러 자원 각각의 상태가 들어 있습니다.
흔한 원인 WebDAV 클라이언트(PROPFIND).
RFC 4918
WebDAV: 같은 다중 상태 응답 안에서 이미 나온 항목은 다시 나열하지 않습니다.
흔한 원인 WebDAV 바인딩.
RFC 5842
응답이 현재 자원에 대한 차분(인스턴스 조작)입니다.
흔한 원인 델타 인코딩. 드묾.
RFC 3229
여러 표현이 있어 클라이언트가 고를 수 있습니다.
흔한 원인 드묾.
RFC 9110 15.4.1
Location 의 주소로 영구 이동했습니다. 따라갈 때 POST 를 GET 으로 바꾸는 클라이언트가 있습니다.
흔한 원인 HTTP → HTTPS, www → 루트, 옮긴 페이지.
return 301 … 또는 rewrite … permanent.redirect.RFC 9110 15.4.2
Location 으로 임시 이동. 따라갈 때 POST 를 GET 으로 바꾸는 클라이언트가 있습니다.
흔한 원인 로그인으로 보내기, 임시 이동.
return 302 … 또는 rewrite … redirect.redirect.RFC 9110 15.4.3
결과는 Location 에서 GET 으로 받습니다.
흔한 원인 폼 제출 뒤 POST/리다이렉트/GET.
redirect.RFC 9110 15.4.4
가지고 있는 캐시가 아직 유효합니다. 본문은 없습니다.
흔한 원인 If-None-Match · If-Modified-Since 조건부 요청.
RFC 9110 15.4.5
폐지됨: 프록시를 거쳐 접근하라는 뜻.
흔한 원인 쓰이지 않음.
RFC 9110 15.4.6
예약됨. 이전 초안에서 쓰였고 지금은 쓰지 않습니다.
RFC 9110 15.4.7
메서드와 본문을 그대로 둔 채 임시 이동합니다.
흔한 원인 브라우저의 HSTS 내부 이동, API 이전.
redirect.RFC 9110 15.4.8
메서드와 본문을 그대로 둔 채 영구 이동합니다.
흔한 원인 옮긴 API 주소.
redirect.RFC 9110 15.4.9
요청이 잘못된 꼴이라 처리할 수 없습니다.
흔한 원인 깨진 문법 · JSON, 잘못된 헤더, 너무 큰 헤더 · 쿠키.
large_client_header_buffers 버퍼 하나보다 큼(「Request Header Or Cookie Too Large」, 안에서는 494), HTTPS 포트로 평문 HTTP(안에서는 497), 클라이언트 인증서 오류(495 · 496).RFC 9110 15.5.1
인증이 필요하거나 실패했습니다. 응답에 WWW-Authenticate 가 옵니다.
흔한 원인 자격 증명 없음 · 틀림, 만료된 토큰.
auth_basic 에 올바른 자격 증명이 없음.RFC 9110 15.5.2
나중을 위해 예약됨.
흔한 원인 일부 API 가 결제 · 한도에 씁니다.
RFC 9110 15.5.3
요청을 이해했지만 거부합니다.
흔한 원인 접근 규칙, 파일 권한, 방화벽 · WAF 차단.
deny 규칙, nginx 가 읽을 수 없는 파일, index 파일이 없고 autoindex off 인 디렉터리.http-request deny 규칙.RFC 9110 15.5.4
자원이 없습니다(또는 있다고 밝히지 않음).
흔한 원인 틀린 경로, 지운 페이지, 잘못된 root · 라우팅.
RFC 9110 15.5.5
이 자원에는 그 메서드를 쓸 수 없습니다. 응답의 Allow 에 허용 메서드가 옵니다.
흔한 원인 정적 파일에 POST, API 경로에 틀린 메서드.
RFC 9110 15.5.6
Accept* 헤더에 맞는 표현이 없습니다.
흔한 원인 엄격한 내용 협상.
RFC 9110 15.5.7
프록시가 자격 증명을 요구합니다(Proxy-Authenticate).
흔한 원인 회사 프록시.
RFC 9110 15.5.8
완전한 요청을 기다리다 포기했습니다.
흔한 원인 느리거나 멈춘 클라이언트, 놀고 있는 keep-alive 연결.
client_header_timeout · client_body_timeout 초과.RFC 9110 15.5.9 · 매뉴얼: HAProxy 로그 한 줄 읽기 — 상태 코드와 종료 상태
요청이 자원의 현재 상태와 충돌합니다.
흔한 원인 편집 충돌, 중복 키, 버전 불일치.
RFC 9110 15.5.10
자원이 영구히 없어졌습니다.
흔한 원인 일부러 없앤 페이지 · API 버전.
RFC 9110 15.5.11
서버가 Content-Length 헤더를 요구합니다.
흔한 원인 길이 없이 보낸 본문.
RFC 9110 15.5.12
If-Match · If-Unmodified-Since 조건이 거짓입니다.
흔한 원인 ETag 를 쓴 낙관적 잠금.
RFC 9110 15.5.13
요청 본문이 서버가 받는 크기보다 큽니다.
흔한 원인 크기 제한을 넘는 업로드 · JSON 본문.
client_max_body_size(기본 1m)보다 큼.h1-accept-payload-with-any-method 참고).RFC 9110 15.5.14
요청 URI 가 서버가 받는 길이보다 깁니다.
흔한 원인 아주 긴 쿼리, 매개변수를 계속 덧붙이는 리다이렉트 고리.
large_client_header_buffers 버퍼 하나에 들어가지 않음.RFC 9110 15.5.15
본문 형식(Content-Type · Content-Encoding)을 지원하지 않습니다.
흔한 원인 Content-Type: application/json 없이 JSON 을 보냄, JSON API 에 폼 데이터.
RFC 9110 15.5.16
요청한 바이트 범위가 자원 밖입니다.
흔한 원인 바뀌었거나 작아진 파일을 이어 받기.
RFC 9110 15.5.17
서버가 Expect 헤더를 들어줄 수 없습니다.
흔한 원인 Expect: 100-continue 를 거부하는 서버 · 프록시.
RFC 9110 15.5.18
예약됨. 만우절 RFC 2324 의 「I’m a teapot」 으로 알려져 있고, RFC 9110 이 다른 용도로 배정되지 않게 예약했습니다.
흔한 원인 장난 · 이스터에그 응답.
RFC 9110 15.5.19
이 호스트에 대해 답할 수 없는 서버로 요청이 갔습니다.
흔한 원인 다른 호스트에 재사용된 HTTP/2 연결, SNI 와 Host 불일치.
RFC 9110 15.5.20
문법은 맞지만 내용을 처리할 수 없습니다.
흔한 원인 API 의 입력값 검증 오류.
RFC 9110 15.5.21
WebDAV: 자원이 잠겨 있습니다.
흔한 원인 다른 클라이언트가 잠근 파일.
RFC 4918
WebDAV: 기대던 다른 동작이 실패해서 이 동작도 실패했습니다.
RFC 4918
다시 재생될 수 있는 요청(TLS early data)을 처리하지 않겠다는 뜻입니다.
흔한 원인 TLS 1.3 0-RTT 요청.
RFC 8470
Upgrade 에 적힌 다른 프로토콜로 바꿔야 합니다.
RFC 9110 15.5.22
조건부 요청(If-Match)이어야 합니다.
흔한 원인 덮어쓰기 사고를 막는 API.
RFC 6585
요청 수 제한을 넘었습니다. Retry-After 에 다시 시도할 때가 올 수 있습니다.
흔한 원인 API 한도, 봇, 재시도 폭주.
limit_req_status 429(기본값은 503).RFC 6585
헤더가 너무 큽니다.
흔한 원인 아주 큰 쿠키 · 토큰.
RFC 6585
nginx 가 아무것도 보내지 않고 연결을 끊습니다(return 444;). nginx 접속 로그에만 보입니다.
흔한 원인 원치 않는 호스트 · 스캐너 막기. 클라이언트는 빈 응답을 받습니다(curl: 「Empty reply from server」).
nginx: ngx_http_rewrite_module · ngx_http_request.h
법적 이유로 막혔습니다.
흔한 원인 법원 명령, 지역 제한.
RFC 7725
요청 헤더가 large_client_header_buffers 버퍼 하나보다 클 때 nginx 안에서 쓰는 코드입니다. 클라이언트에는 400 으로 나가고 error_page 494 로 따로 잡을 수 있습니다.
흔한 원인 큰 쿠키 · 토큰.
nginx: ngx_http_request.h
클라이언트 인증서 검증 중 오류가 났습니다. 클라이언트에는 400 으로 나가고 error_page 로 잡을 수 있습니다.
흔한 원인 상호 TLS 에서 잘못되었거나 믿을 수 없는 클라이언트 인증서.
nginx: ngx_http_ssl_module · ngx_http_special_response.c
필요한 클라이언트 인증서를 내지 않았습니다. 클라이언트에는 400 으로 나가고 error_page 로 잡을 수 있습니다.
흔한 원인 ssl_verify_client on 인데 클라이언트 인증서 없음.
nginx: ngx_http_ssl_module · ngx_http_special_response.c
HTTPS 포트로 평문 HTTP 요청이 왔습니다. 클라이언트에는 400 으로 나가고 error_page 497 https://$host$request_uri; 로 돌려보낼 수 있습니다.
흔한 원인 http://example.com:443/, 프록시 · 헬스 체크의 포트 착오.
nginx: ngx_http_ssl_module · ngx_http_special_response.c
nginx 가 응답 헤더를 보내기 전에 클라이언트가 연결을 끊었습니다. 로그에만 남고 보내는 것은 없습니다.
흔한 원인 느린 백엔드보다 짧은 클라이언트 · 앞단 프록시의 시간 제한, 페이지를 떠난 사용자. Cloudflare 로그에도 남습니다.
nginx: ngx_http_request.h
일반적인 서버 쪽 실패입니다.
흔한 원인 앱 예외, 설정 오류.
RFC 9110 15.6.1 · 매뉴얼: Nginx 접속 로그에서 5xx 를 내는 경로 찾기
필요한 기능(예: 메서드)을 지원하지 않습니다.
흔한 원인 모르는 메서드 · 전송 인코딩.
RFC 9110 15.6.2
프록시 · 게이트웨이가 위쪽 서버로부터 잘못된 응답을 받았거나 받지 못했습니다.
흔한 원인 백엔드 꺼짐, 연결 거부, 앱 죽음, 너무 큰 위쪽 헤더.
connect() failed (111: Connection refused) · upstream prematurely closed connection · upstream sent too big header · no live upstreams.http-response deny 규칙에 걸림.RFC 9110 15.6.3 · 매뉴얼: Nginx 502 Bad Gateway — 오류 로그 문구로 원인 가르기
지금은 요청을 처리할 수 없습니다. Retry-After 에 시점이 올 수 있습니다.
흔한 원인 과부하, 점검, 건강한 백엔드 없음, 요청 수 제한.
limit_req · limit_conn 이 기본으로 503 을 냅니다(limit_req_status).monitor fail 조건에 맞음.RFC 9110 15.6.4 · 매뉴얼: HAProxy 로그 한 줄 읽기 — 상태 코드와 종료 상태
프록시 · 게이트웨이가 위쪽 서버의 응답을 제때 받지 못했습니다.
흔한 원인 느린 백엔드 쿼리, 긴 작업, 네트워크 문제.
upstream timed out — 백엔드가 proxy_read_timeout(기본 60초)이나 연결 제한 시간 안에 답하지 않음.RFC 9110 15.6.5 · 매뉴얼: HAProxy 로그 한 줄 읽기 — 상태 코드와 종료 상태
요청의 HTTP 버전을 지원하지 않습니다.
흔한 원인 연결에 엉뚱한 바이트, HTTP 가 아닌 클라이언트.
RFC 9110 15.6.6
내용 협상 설정 오류: 고른 변형이 다시 협상합니다.
흔한 원인 드묾.
RFC 2295
WebDAV: 요청을 마칠 저장 공간이 모자랍니다.
흔한 원인 WebDAV 서버의 디스크 · 할당량 가득.
RFC 4918
WebDAV: 처리 중 무한 고리를 찾았습니다.
RFC 5842
폐지됨: 확장이 더 필요하다는 뜻이었습니다.
흔한 원인 쓰이지 않음.
RFC 2774 · Status change of HTTP experiments to Historic
먼저 네트워크에 로그인해야 합니다.
흔한 원인 공용 Wi-Fi 의 로그인 페이지.
RFC 6585
원 서버가 Cloudflare 에 빈 · 알 수 없는 · 예상 밖의 응답을 줬습니다.
흔한 원인 원 서버 죽음, Cloudflare IP 를 막은 방화벽, 128KB 넘는 헤더, 상태 줄 없는 응답, HTTP/2 설정 오류.
Cloudflare docs: Error 520
원 서버가 Cloudflare 의 연결을 거부했습니다.
흔한 원인 웹 서버가 꺼짐, Cloudflare IP 차단, 80(Flexible) · 443(Full) 에 듣는 프로세스 없음.
Cloudflare docs: Error 521
Cloudflare 가 원 서버에 닿지 못하고 시간 초과: 19초 안에 SYN+ACK 이 없거나, 연결 뒤 90초 안에 요청에 대한 ACK 이 없음.
흔한 원인 Cloudflare IP 를 제한 · 버리는 방화벽, 과부하, DNS 의 틀린 원 서버 IP.
Cloudflare docs: Error 522
Cloudflare 가 원 서버에 닿을 수 없습니다 — 그 IP 로 가는 경로가 없습니다.
흔한 원인 틀린 A/AAAA 레코드, 라우팅 문제(AWS 에서 172.64.0.0/13 을 삼키는 넓은 경로).
Cloudflare docs: Error 523
연결은 됐지만 원 서버가 Proxy Read Timeout(기본 125초) 안에 HTTP 응답을 주지 않았습니다.
흔한 원인 오래 걸리는 요청, 과부하.
Cloudflare docs: Error 524
Cloudflare 와 원 서버 사이 TLS 핸드셰이크가 실패했습니다(SSL 모드 Full · Full (strict)).
흔한 원인 올바른 인증서 없음, 443 닫힘, SNI 미지원, 맞는 암호 묶음 없음.
Cloudflare docs: Error 525
Cloudflare 가 원 서버 인증서를 검증하지 못합니다(SSL 모드 Full (strict)).
흔한 원인 만료 · 자체 서명 · 이름이 다른 인증서, 빠진 중간 인증서.
Cloudflare docs: Error 526
Cloudflare 가 원 서버 호스트 이름을 풀지 못합니다. 본문에 1xxx 오류 코드가 있습니다.
흔한 원인 페이지의 1xxx 오류를 봅니다(예: 1016 Origin DNS error).
Cloudflare docs: Error 530
IANA HTTP 상태 코드 레지스트리에 있는 표준 코드 64개와, 표준이 아닌 nginx · Cloudflare 고유 코드 14개를 한 목록에 모았습니다. 코드마다 IANA 이름과 근거 RFC, 뜻, 흔한 원인, 그리고 nginx · HAProxy · Cloudflare 가 그 코드를 직접 내는 경우를 각 공식 문서에 적힌 대로 붙였습니다. 코드 · 갈래(4xx) · 낱말로 찾고, 위의 단추로 갈래나 벤더만 남깁니다.
| 찾은 것 | 결과 |
|---|---|
502 | Bad Gateway — nginx 는 error.log 의 connect() failed (111: Connection refused) 등으로 원인이 갈림 |
499 | nginx 전용 — 응답 전에 클라이언트가 끊음. 로그에만 남음 |
522 | Cloudflare 전용 — 원 서버에 19초 안에 TCP 연결을 못 함 |
418 | IANA 이름은 (Unused) — 「I’m a teapot」 은 만우절 RFC 2324 |
599 | IANA 미할당 — 표준 뜻 없음 |
IANA 에서 받은 레지스트리 CSV 의 할당된 코드 64개와 코드 · 이름 · 참조가 글자까지 같은지, 미할당 범위 11개가 같은지, 벤더 코드가 레지스트리와 겹치지 않는지 비교했습니다(전수 일치). nginx 코드는 nginx 소스(ngx_http_request.h · ngx_http_special_response.c)와 nginx.org 문서, HAProxy 는 설정 설명서의 「HAProxy 가 직접 내는 상태 코드」 표, Cloudflare 는 각 오류 문서에 근거합니다.
curl -sS -o /dev/null -w '%{http_code}\n' https://example.com/ 은 상태 코드만 찍습니다. 헤더까지 보려면 curl -I 나 curl -i, 리다이렉트를 따라가며 보려면 -L 을 더합니다.
nginx 안에서 쓰는 코드라 클라이언트에는 400 과 그 사유 문구(예: 「Request Header Or Cookie Too Large」)로 나갑니다. error_page 497 https://$host$request_uri; 처럼 error_page 로 따로 잡을 때 씁니다.
아니요. 목록은 이 페이지 안에 다 들어 있고 찾기는 브라우저 안에서 합니다. 검색어는 서버 · 주소창 · 방문 통계 · 광고 어디로도 보내지 않습니다. 자세한 것은 개인정보 처리 안내에 있습니다.