HTTP 상태 코드
HTTP 상태 코드의 뜻을 찾고, 헷갈리는 짝 — 401 과 403, 301 과 308, 400 과 422 — 을 가릅니다.
어느 쪽으로 넣어도 찾습니다.
46개
| 코드 | 이유구 | 언제 쓰나 |
|---|---|---|
| 100 | Continue | |
| 101 | Switching Protocols | WebSocket 으로 올라갈 때 씁니다. |
| 103 | Early Hints | 진짜 응답이 준비되기 전에 미리 불러올 것을 알려 줍니다. |
| 200 | OK | 성공한 요청의 기본값입니다. |
| 201 | Created | 새 자원이 생겼습니다. Location 헤더로 그 자리를 가리킵니다. |
| 202 | Accepted | 줄을 세웠을 뿐 끝나지 않았습니다. 호출한 쪽이 다시 확인해야 합니다. |
| 204 | No Content | 성공했고 돌려줄 것이 없습니다. 본문을 넣어도 무시됩니다. |
| 206 | Partial Content | Range 헤더에 답해 파일의 일부만 보냅니다. |
| 301 | Moved Permanently | 영구 이동. 클라이언트가 메서드를 GET 으로 바꿔도 됩니다. |
| 302 | Found | 임시. 이쪽도 메서드가 GET 으로 바뀔 수 있습니다. |
| 303 | See Other | 결과는 다른 곳에서 가져가라는 뜻이고, 언제나 GET 입니다. |
| 304 | Not Modified | 캐시에 있는 것이 아직 쓸 만합니다. 본문을 보내지 않습니다. |
| 307 | Temporary Redirect | 302 와 같되 메서드가 그대로 유지됩니다. |
| 308 | Permanent Redirect | 301 과 같되 메서드가 그대로 유지됩니다. |
| 400 | Bad Request | 요청을 아예 알아들을 수 없었습니다. |
| 401 | Unauthorized | 인증되지 않았습니다. 이름과 달리 권한이 아니라 신원 문제입니다. |
| 402 | Payment Required | |
| 403 | Forbidden | 누구인지는 알지만 그래도 안 됩니다. |
| 404 | Not Found | 그런 자원이 없거나, 있다고 말해 주지 않겠다는 뜻입니다. |
| 405 | Method Not Allowed | 경로는 있고 이 동사가 없습니다. 되는 것을 Allow 에 적어 보냅니다. |
| 406 | Not Acceptable | 클라이언트가 요구한 형식 중 만들 수 있는 것이 없습니다. |
| 408 | Request Timeout | |
| 409 | Conflict | 지금 상태와 부딪칩니다. 키가 겹치는 경우가 대표적입니다. |
| 410 | Gone | 일부러 지웠고 돌아오지 않습니다. |
| 411 | Length Required | |
| 412 | Precondition Failed | If-Match 나 If-None-Match 조건이 맞지 않았습니다. |
| 413 | Content Too Large | 본문이 서버가 받는 크기를 넘었습니다. |
| 414 | URI Too Long | |
| 415 | Unsupported Media Type | Content-Type 이 이 창구가 다루는 형식이 아닙니다. |
| 416 | Range Not Satisfiable | |
| 418 | I'm a teapot | 1998년 만우절 농담입니다. 아직 등록부에 남아 있습니다. |
| 422 | Unprocessable Content | 형식은 맞는데 뜻이 틀렸습니다. 검증 오류에 흔히 씁니다. |
| 425 | Too Early | |
| 426 | Upgrade Required | |
| 428 | Precondition Required | |
| 429 | Too Many Requests | 요청이 잦습니다. 언제 다시 오라고 Retry-After 로 알려 주세요. |
| 431 | Request Header Fields Too Large | |
| 451 | Unavailable For Legal Reasons | 삭제 명령 같은 법적 이유로 막혔습니다. |
| 500 | Internal Server Error | 처리하지 못한 실패입니다. 아무도 노려서는 안 되는 마지막 그물입니다. |
| 501 | Not Implemented | |
| 502 | Bad Gateway | 뒤쪽 서버가 말이 안 되는 것을 돌려줬습니다. |
| 503 | Service Unavailable | 내려갔거나 밀렸고, 돌아올 예정입니다. |
| 504 | Gateway Timeout | 뒤쪽 서버가 제때 답하지 않았습니다. |
| 505 | HTTP Version Not Supported | |
| 507 | Insufficient Storage | |
| 511 | Network Authentication Required | 먼저 로그인하라는 공용 와이파이 같은 관문입니다. |
헷갈리는 짝
401403
401 은 누구인지 모른다는 뜻이고, 403 은 누구인지 알지만 안 된다는 뜻입니다.
301308
301 은 클라이언트가 POST 를 GET 으로 바꿔도 됩니다. 308 은 메서드를 지킵니다. API 에는 308 을 쓰세요.
302303
302 는 메서드가 바뀔 수 있고 303 은 언제나 GET 으로 바뀝니다. 폼 전송 뒤에는 303 입니다.
400422
400 은 본문을 읽지 못한 경우이고, 422 는 읽었는데 내용이 틀린 경우입니다.
404410
404 는 그런 것이 없다는 뜻이고, 410 은 일부러 지웠으니 그만 묻으라는 뜻입니다.
502503
502 는 뒤쪽 서버가 이상한 것을 돌려준 경우이고, 503 은 이 서버가 지금 일을 못 하는 경우입니다.
파일은 서버로 전송되지 않고 브라우저에서만 처리됩니다.
사용 방법
가입도 설치도 없이, 사용 횟수 제한도 없이 무료로 쓸 수 있습니다.
번호나 이유구의 일부를 넣으면 코드를 찾습니다. 입력하는 동안 목록이 좁혀지고, 각 줄에는 그것을 언제 보내야 하는지가 붙어 있습니다.
첫 자리가 갈래를 정합니다. 1xx 는 알림, 2xx 는 성공, 3xx 는 리다이렉트, 4xx 는 요청 잘못, 5xx 는 서버 잘못입니다. 이 표에 없는 코드라도 그만큼은 알 수 있습니다.
4xx 와 5xx 의 구분은 실무에서 무게가 다릅니다. 잘못된 요청에 500 을 내면 당직자가 있지도 않은 서버 장애를 찾아 헤매고, 터진 핸들러에 400 을 내면 진짜 장애가 묻힙니다.
아래 짝들은 코드 리뷰에서 실제로 다투게 되는 것들입니다. 401 은 누구인지 모른다는 뜻이고 403 은 누구인지 알지만 안 된다는 뜻입니다. 권한 문제에 401 을 보내면 이미 보낸 자격 증명을 다시 보내라고 부르는 셈입니다.
이유구는 규격에 적힌 그대로 두고 번역하지 않습니다. 실제로 회선을 타고 가는 글자가 그것이기 때문입니다.
입력한 값은 서버로 전송되지 않습니다. 브라우저 안에서만 찾습니다.