본문 바로가기
프로그래머/프로그래밍

Http 오류코드 정리

by plog 2009. 5. 17.
HTTP/1.1 상태 코드 정의는 RFC2616에 규정되어 있는데 간단히 정리하면 다음과 같다.
http://www.w3.org/Protocols/rfc2616/rfc2616.html

100은 Informational(정보제공), 200은 Successful(성공), 300은 Rediection(추가작업), 400은 Client Error(클라이언트측 오류), 500은 ServerError(서버측 오류)를 의미한다. 100, 200, 300 코드는 서버와 User Agent간의 상태를 표시한 것이기 때문에 일반 사용자가 그 내용을 볼 수 없다. 하지만 400, 500 코드는 일반사용자도 흔히 볼 수 있는 내용이다.


Code Description 의 미
100 Continue Client는 Request를 Server는 Response를 계속적으로 해야한다는 것
101 Switching Protocols Client의 요청에 따라 연결 프로토콜을 전환
200 OK 에러 없이 전송 성공
201 Created POST 명령 실행 및 성공
202 Accepted 서버가 클라이언트 명령을 받음
203 Non-Authoritative Information 서버가 클라이언트 요구 중 일부만 전송
204 No Content 클라언트 요구을 처리했으나 전송할 데이터가 없음
205 Reset Content 클라이언트 폼 전송후 폼 내용 삭제
206 Partial Content  
300 Multiple Choices  
301 Moved Permanently  
302 Moved Temporarily 요구한 데이터를 변경된 임시 URL에서 찾았음
303 See Other 요구한 데이터가 변경된 URL에 있음을 명시
304 Not Modified 요구한 데이터를 변경하지 않았기 때문에 문제가 있음
305 Use Proxy  
307 Temporary Redirect  
400 Bad Request 클라이언트의 잘못된 요청으로 처리할 수 없음
401 Unauthorized 클라이언트의 인증 실패, 권한없음
01 로그온 실패
02 서버 구성으로 인한 로그온 실패
03 리소스의 ACL1)에 의해 액세스가 거부
04 필터에 의해 권한 부여가 거부
05 ISAPI2) 또는 CGI 응용 프로그램으로 권한 부여가 실패
403 Forbidden 접근이 거부된 문서를 요청함, 액세스 금지
01 액세스 실행 금지
02 읽기 액세스 금지
03 쓰기 액세스 금지
04 SSL3) 필요
05 SSL 128 필요
06 IP 주소 거부
07 클라이언트 인증서 필요
08 사이트 액세스 거부
09 연결된 사용자가 너무 많음
10 잘못된 구성
11 암호 변경
12 매퍼가 액세스를 거부
13 클라이언트 인증서 해지
15 클라이언트 액세스 라이센스 초과
16 클라이언트 인증서가 유효하지 않거나 신뢰할 수 없음
17 클라이언트 인증서가 만료되었거나 아직 유효하지 않음
404 Not Found 문서를 찾을 수 없음
405 Method Not Allowed 리소스를 허용안함
406 Not Acceptable 허용할 수 없음
407 Proxy Authentication Required 프록시 인증 필요
408 Request Timeout 요청시간이 지남
409 Conflict 리소스간 충돌로 인하여 서버가 응답할 수 없음
410 Gone 요청된 리소스를 영구적으로 사용할 수 없음
411 Length Required Content-Length를 정의하지 않고 리소스를 요청하였음
412 Precondition Failed 전제조건 실패
413 Request Entity Too Large Request Entity가 서버가 처리할 수 있는 것보다 큼
414 Request-URI Too Long URI가 너무 김
415 Unsupported Media Type 지원되지 않은 미디어 형식
416 Requested Range Not Satisfiable  
417 Expectation Failed  
500 Internal Server Error 내부 서버 오류(잘못된 스크립트 실행시)
11 서버 종료 중
12 응용 프로그램 다시 시작
13 서버 사용량이 많음
14 잘못된 응용 프로그램
15 global.asa4)에 대한 요청이 허용되지 않음.
501 Not Implemented 클라이언트에서 서버가 수행할 수 없는 행동을 요구함
502 Bad Gateway 서버의 과부하 상태
503 Service Unavailable 외부 서비스가 죽었거나 현재 멈춤 상태
504 Gateway Timeout  
505 HTTP Version Not Supported  

  1. 원문) Access Control List, 객체에 대한 접근이 허가된 주체들과 이들 주체가 허가받은 접근 종류들이 기록된 목록
  2. 원문) Internet server application programming interface, MS의 웹 서버인 인터넷정보서버(IIS)가 구비되어 있으며, 외부 프로그램을 기동하기 위한 인터페이스
  3. 원문) Secure Sockets Layer, 월드와이드웹 브라우저와 웹서버 간에 데이터를 안전하게 주고받기위한 업계 표준프로토콜
  4. 원문) MS Windows환경에서 프로그램을 사용할 때 실행파일을 더블클릭하면 프로그램이 실행되고 닫기를 클릭하면 종료되어 즉각적으로 반응한다. 그러나 Application 객체는 시작과 종료가 즉각적으로 발생하지 않는다. Application 객체는 서버상의 하나의 가상 매핑에 존재하는 모든 문서들로 정의되므로, 클라이언트가 가상 매핑으로부터 처음에 문서를 요청할 때 Application이 시작되고 웹 서버가 운영체제에 의해 종료되었을 때와 OnEnd 이벤트 핸들러의 스크립트가 실행될 때만이 Application이 종료된다.

    애플리케이션의 시작과 끝을 정의하는 문제는 변수와 작업의 흐름을 정확하게 관리할 수 있는 능력에 영향을 미친다. ASP는 개별 사용자 세션의 시작과 종료 뿐만 아니라 애플리케이션의 시작과 끝을 정의할 수 있는 Global.asa 라는 특별한 파일을 제공한다. 
    이 파일은 Application_OnStart, Application_OnEnd, Session_OnStart, Session_OnEnd  4개의 주요 이벤트를 감지하는 책임이 있다.

404 : NOT_FOUND , Request-URL를 찾을 수 없음

500 : INTERNAL_SERVER_ERROR , 내부서버 오류
(잘못된 스크립트 실행과 같은 예상하지 못한 오류일 경우)

503 : SERVICE_UNAVAILABLE , 과부하 또는 여러가지 이유로 현재 요청을 처리하지 못함
(임시적이며 일정한 시간뒤에 정상적으로 서비스 가능) 

code : 200
reason field : OK       
의미 : 클라이언트의 request가 성공적으로 수행됐다. request처리결과로 클라이언트에게 전달되는 정보는 사용된 method에 따라서 달라진다.

reason field : GET
의미 : request가 지정한 자원이 response메세지로 전달 된다.
                
reason field : HEAD
의미 : response메세지에는 요청된 자원에 관한 정보를 나타내는 header만이 포함된다.
                
reason field : POST
의미 : 지정된 동작의 수행결과를 포함하거나 결과를 설명하는 엔터티가 전달된다. 

code : 201
reason field : Created
의미 : request가 처리되었고 그 결과로 새로운 자원이 생성되었다. 생성된 새로운 자원을 나타내는 URI 값이 response메시지로 전달된다. 서버가 이와 같은 status code(상태코드)를 클라이언트에게 전달하기 위해서는 새로운 자원을 먼저 생성시켜야 한다. response메시지를 전달 할때까지 새로운 자원이 생성되지 못하면 status code 202(Accepted)를 보내야 한다. POST method만이 서버에 새로운 자원을 생성시킬 수 있다.
                
code : 202
reason field : Accepted
의미 : request가 수락되었으나 response메시지를 전달할 때까지 그 프로세싱이 완료되지 못했으며 또한 언제까지 request의 수행결과를 사용자가 볼 수 있을지를 확실히 판단할 수 없다. 이와 같은 status code는 request가 수락된 것(accepted)만을 나타낼뿐 궁극적으로 그 request가 처리될 것이라는 보장 할 수 없을 때 사용된다. status code 202는 Web  브라우저와 같이 서버의 처리결과를 전달받을 때까지 계속 기다리게 되는 클라이언트를 위한 것은 아니다. WEb브라우저와는 다른 일종의 batch프로세서(하루에 한번정도 실행되는)의 request를 서버가 받아들일 수 있도록 하기위한 것이다.
                
code : 204
reason field : No Content
의미 : 서버가 request를 처리했지만 클라이언트에게 전달할 새로운 정보가 없다. 이 status code를 전달받는 Web브라우저는 현재 디스플레이 중인 내용을 변경시키지 않아야 한다. 이 code를 정의한 주된 목적은 현재 디스플레이 중인 문서의 내용을 변경시키지 않으면서 CGI스크립트 등에 입력을 전달할 수 있도록 하기 위해서이다.
                
code : 300
reason field : Multiple
의미 : HTTP/1.0을 사용하는 경우에는 이 code가 직접적으로 사용되지는 않는다. 다만, 3xx클래스에 속하는 status code의 디폴트값으로 사용된다. 그 의미는 301, 302, 304만이 HTTP/1.0에 정의되어 있으므로 그 외의 status code값을 전달받는 경우에는 300으로 간주한다는 의미가 되는 것이다.
                
code :301
reason field :  Moved
의미 : 요청된 자원의 URI값이 완전히 변경되었으므로 앞으로는 새로운 URI값을 사용하여야 한다. 새로운 URI값은 Location(위치)헤더를 통해서 클라이언트에게 전달된다. 또한 HEAD method를 제외한 모든 경우에 response메시지의 entity(실재) body를 통해서 새로운 URI의 하이퍼링크를 포함 하는 짧은 메시지를 전달해 주어야 한다. Web브라우저는 POST method를 사용한 request의 결과로 301 status code를 전달받는 경우에는 자동으로 새로운 URI에 접속해서는 안된다. 반드시, 사용자의확인을 거쳐야 한다.
                
code :302
reason field : Moved
의미 : 요청된 자원의 URI값이 임시로 변경되었다. 따라서 추후  Temporarily(임시폴더)에도 현재의 URI값을 계속 사용하여야 한다. 새로운 URI값은 Location헤더를 통해서 클라이언트에게 전달된다. 또, HEAD method를 제외한 모든 경우에 response메시지의  entity body를 통해서 새로운 URI의 하이퍼링크를 포함하는 짧은 메시지를 전달해 주어야 한다. Web브라우저는 POST method를 사용한 response의 결과로 302 status code를 전달받는 경우에는 자동으로  새로운 URI에 접속을 해서는 안된다. 반드시 사용자의 확인을 거쳐야 한다.
                 
code : 304
reason field : Not
의미 : conditional GET method가 사용된 경우에 전달된다. Modified  request를 처리한 결과 If-Modified-Since헤더에 지정된 날짜/시간 이래로 지정된 문서가 변경된 사실이 없는 경우 서버는 이 status code로 응답해야 한다. 이때, entity body는 전송되지 않는다. reseponse메시지로 전달되는 헤더들은 주로 cache와 관련된 정보를 포함하게 된다. cache manager(대개의 경우는 Web브라우저 자체에 그 기능이 포함된다)는 304 response에 포함된 헤더의 값을 cache된 entity들에 반영할 수 있도록 하여야 한다.
                
code : 400
reason field : Bad Request
의미 : request메시지의 syntax(체계, 배열)가 잘못되어서 서버가 request를 처리할 수 없다. 재접속을 하는 경우에 클라이언트는 반드시 올바른 request메시지를 사용해야 한다.
                 
code : 401
reason field : Unauthorized
의미 : request가 user quthentication을 필요로 한다는 것을 클라이언트에게 알려주기 위해서 사용된다. WWW-Authenticate(인증하다, 증명하다)헤더를 통해서 요청된 자원에 적용되는 challenge를 전달한다. 401 response를 받은 클라이언트는 적절한 Authorization credentials(위임장)를 포함하는 Authorization헤더와 함께 다시 request메시지를 전송한다. request메시지에 그와 같은 Authorization credentials이 포함된 경우에 401 status code가 전달되면 user authentication이 실패한 것을 나타낸다.
                
code : 403
reason field : Forbidden
의미 : 서버가 request의 처리를 거절하는 것을 나타낸다. 이와 같은 응답을 받은 경우에는
동일한 request를 반복하지 말아야 한다. 왜냐하면 무조건 request가 거절되는 것이기 때문이다. 403 status code는 request를 거절하는 이유를 명시적으로 밝히고 싶지 않거나 적절한 status code가 없을때 사용된다.
                 
code : 404
reason field : Not Found
의미 : Request-URI에 해당하는 자원을 찾을 수 없을 경우에 사용된다.
그런 상태가 일시적인 것인지 아니면 언제나 그렇게 되는지를 나타내는 어떤 정보도 전달되지 않는다. 이런 상태를 클라이언트에게 알리고 싶지 않은 경우에는 403 code를 대신 사용해도 된다.
                 
code : 500
reason field : Interna
의미 : 서버프로그램에서 예기치 않은 오류가 발생하여서 request Srever Error  를 처리할 수 없다.
                 
code : 501
reason field : Not
의미 : request를 처리하기 위해서는 필요한 기능을 서버가 갖추고 Implemented(충족시키다)있지 못하다.
                 
code : 502
reason field : Bad
의미 : gateway나 proxy로 동작하는 서버가 사용하는 것으로 자신 Gateway의 위쪽에 있는 서버로 부터  잘못된 response메시지를 전송 받았다는 것을 나타낸다.
                 
code : 503
reason field : Service
의미 : 과부하나 서버 maintenance(유지, 보존) 때문에 서버가 잠시동안 request Unavailable(요청불가능)를 처리해 줄 수 없는 상태에 있다.

참고: http://blog.daum.net/sopcass

댓글