1XX
정보 전달: 요청을 받았고, 작업을 진행 중이라는 의미이다. HTTP/1.0 이후 정의되지 않았다. 서버들도 클라이언트에게 이 코드를 보내지는 않는다. 단 101의 경우 WebSocket등에서 쓰인다.
- 1xx: Informational - Request received, continuing process
- 100 Continue
- 101 Switching Protocols
- 102 Processing
2XX
성공: 이 작업을 성공적으로 받았고, 이해했으며, 받아들여졌다는 의미이다. 200과 206을 제외하고는 볼 일이 거의 없는 코드들이다.
- 2xx: Success - The action was successfully received, understood, and accepted
- 200 OK: 성공적으로 처리했을 때 쓰인다. 가장 일반적으로 볼 수 있는 HTTP 상태.
- 201 Created: 요청이 성공적으로 처리되어서 리소스가 만들어졌음을 의미한다.
- 202 Accepted: 요청이 받아들여졌지만 처리되지 않았음을 의미한다.
- 203 Non-Authoritative Information
- 204 No Content: 성공적으로 처리했지만 컨텐츠를 제공하지는 않는다.~~about:blank~~
- 205 Reset Content 서버가 요청을 성공적으로 처리했지만 콘텐츠를 표시하지 않는다. 204 응답과 달리 이 응답은 요청자가 문서 보기를 재설정할 것을 요구한다(예: 새 입력을 위한 양식 비우기).
- 206 Partial Content 컨텐츠의 일부 부분만 제공한다. 보통 클라이언트에서 시작 범위나 다운로드할 범위를 지정한 경우 자동으로 해당 부분만 제공할 때 사용하는 코드이다.
- 207 Multi-Status
- 208 Already Reported
- 226 IM Used
3XX
리다이렉션: 이 요청을 완료하기 위해서는 리다이렉션이 이루어져야 한다는 의미이다. 짧은 주소(단축 URL) 서비스의 경우 접속 시 301이나 302 코드를 보내고, 헤더의 location에 리다이렉션할 실제 URL을 적어 보낸다.
- 3xx: Redirection - Further action must be taken in order to complete the request
- 300 Multiple Choices
- 301 Moved Permanently: 영구적으로 컨텐츠가 이동했을 때 쓴다.
- 302 Found: 다른 페이지로 이동하지만, 나중에 바뀔 수 있음.
- 303 See Other
- 304 Not Modified: 200 다음으로 많이 볼 수 있는 HTTP 상태이다. 이 경우 보통 브라우저에 캐시되어 있는 버전을 쓴다.
- 305 Use Proxy 요청자는 프록시를 사용하여 요청한 페이지만 액세스할 수 있다. 서버가 이 응답을 표시하면 요청자가 사용할 프록시를 가리키는 것이기도 하다.
- 306 Switch Proxy
- 307 Temporary Redirect 일시 리다이렉트
- 308 Permanent Redirect 영구 리다이렉트
* 307,308은 아직 [단계]의 표준으로 대부분의 브라우저에서 해석하지 못한다.
4XX
클라이언트 오류: 이 요청은 올바르지 않다는 의미이다. 여기서부터 브라우저에 직접 표출된다. 굵게 강조된 것은 자주 보이는 오류들이다.
- 4xx: Client Error - The request contains bad syntax or cannot be fulfilled
- 400 Bad Request: 요청 자체가 잘못되었을때 사용하는 코드이다.
- 401 Unauthorized: 인증이 필요한 리소스에 인증 없이 접근할 경우 발생한다. 이 응답 코드를 사용할 때에는 반드시 브라우저에게 어느 인증 방식[* Basic과 Digest 두가지가 있다. Basic은 아이디와 비밀번호를 평문 그대로(!) 전송하며, Digest는 아이디와 nonce값을 이용해 해시를 만들어 전송한다.]을 사용할 것인지 보내 주어야 한다. 단순히 권한이 없는 경우 이 응답 코드 대신 아래 403 Forbidden을 사용해야 한다.
- 403 Forbidden: 서버가 요청을 거부할 때 발생한다. 관리자가 해당 사용자를 차단했거나 서버에 index.html 이 없는 경우에도[* 만약 접근을 index.html까지 지정해서 했다면 404가 뜬다. 이건 방식의 차이인데, index.html을 지정하지 않고 접근하면 서버는 자동으로 index.html을 찾아서 띄워주고 그런 파일이 없다면 해당 디렉토리에 있는 파일 리스트를 보여주게 된다. 그래서 옛날에는 index.html이 없으면 웹 브라우저에 파일 리스트가 뜨는 모습을 자주 볼 수 있었다. 그러나 보안상 이유로 요즘 만들어지는 웹 사이트들은 서버 설정을 통해 클라이언트가 웹 브라우저에서 파일 리스트를 보는 권한을 백이면 백 막아놓기 때문에 접근을 거부하는 403 에러를 띄우게 된다. 그러나 파일까지 지정해서 접근하면 서버는 파일로 바로 접근하기 때문에 파일이 없다는 404 에러를 띄우는 것이다.] 발생할 수 있다. 혹은 권한이 없을 때(로그인 여부와는 무관하다)에도 발생한다.
- 404 Not Found: 찾는 리소스가 없다는 뜻이다.
- 405 Method Not Allowed : PUT이나 DELETE 등 서버에서 허용되지 않은 메소드로 요청시 사용하는 코드이다.
- 406 Not Acceptable : 요청은 정상이나 서버에서 받아들일 수 없는 요청일시 사용하는 코드이다. 보통 웹 방화벽에 걸리는 경우 이 코드가 반환된다.
- 407 Proxy Authentication Required : 프록시 인증이 필요할 경우
- 408 Request Timeout : 요청 중 시간이 초과되었을때 사용하는 코드이다.
- 409 Conflict
- 410 Gone : 404와는 달리 찾는 리소스가 영원히 사라진 경우 사용하는 코드이다.
- 411 Length Required
- 412 Precondition Failed
- 413 Requested Entity Too Large : 요청 본문이 너무 긴 경우 발생한다. 서버 소프트웨어로 엔진엑스를 사용하는 경우 기본 설정 그대로 사용하면 큰 첨부파일을 올릴 때 이 오류 코드가 발생하게 된다.
- 414 Requested URL Too Long: URL이 너무 길 때 발생한다.
- 415 Unsupported Media Type
- 416 Requested Range Not Satisfiable : 요청 헤더의 Range로 지정한 범위가 잘못되었을 때 발생한다.
- 417 Expectation Failed
- 418 I'm a teapot: 찻주전자로 커피를 만들 수 없음. [커피 포트 제어 프로토콜(HTCPCP)(RFC 2324)]
- 429 Too Many Requests: 일정 시간 동안 너무 많은 요청을 보냈을 때 이를 거부하기 위해 사용한다.
- 451 Unavailable For Legal Reasons: 국가 검열 등의 이유로 차단되었을 경우 사용할 수 있도록 정의된 코드이다.
5XX
서버 오류: 올바른 요청에 대해 서버가 응답할 수 없다는 의미이다.
- 5xx: Server Error - The server failed to fulfill an apparently valid request
- 500 Internal Server Error: 서버에 오류가 발생해 작업을 수행할 수 없을 때 뜬다. 보통 설정이나 퍼미션 문제. 아니면 HTTP 요청을 통해 호출한 문서가 실제 HTML 문서가 아니라 JSP, PHP, 서블릿 등의 프로그램일 경우 그 프로그램이 동작하다 세미콜론 빼먹는 등의 각종 에러로 비정상종료하는경우 이 응답코드를 보낸다.
- 501 Not Implemented
- 502 Bad Gateway: 게이트웨이가 잘못 되었을 때 나온다.
- 503 Service Temporarily Unavailable: 서버를 현재 일시적으로 사용할 수 없을 때 뜬다. 유지보수중이거나, 터졌거나 할 때 발생함.
- 504 Gateway Timeout
- 505 HTTP Version Not Supported: HTTP 버전을 서버가 처리할 수 없다. 웬만해서는 볼 수 없다.
- 509 Apache bw/limited extension: 대역폭 제한 초과,
- 520 Unknown Error: 말 그대로 알 수 없는 오류.