본문 바로가기

보안/WEB

[Web] HTTP 상태 코드 정리

728x90

HTTP

 HTTP(Hypertext Transfer Protocol)는 웹 서버와 웹 클라이언트 사이에서 데이터를 주고받기 위해 사용하는 통신 방식이다. TCP/IP 프로토콜 위에서 동작하고 웹을 이용하려면 웹 서버와 웹 클라이언트는 각각 TCP/IP 동작에 필수적인 IP 주소를 가져야 한다. 

 웹 브라우저의 주소창에 URL을 입력하면 웹 클라이언트와 웹 서버 사이에 HTTP 연결이 맺어지고 웹 클라이언트는 웹 서버에  HTTP 요청 메시지를 보낸다. 웹 서버는 요청에 따른 처리를 진행 한 후에 결과를 웹 클라이언트에 HTTP 응답 메시지로 보낸다. 이러한 방식으로 요청, 응답 메시지가 반복적으로 처리 되어 웹을 사용 할 수 있게 된다.

서버의 처리 결과는 응답 메시지의 상태 라인에 있는 상태 코드를 보고 파악 가능하다. 첫째 숫자는 응답 종류 구분, 두개 숫자는 응답 내용 구분하는데 사용한다. 

 

HTTP 응답 종류

1XX : Informational (정보제공) - 임시 응답으로 현재 클라이언트의 요청까지는 처리 되었으니 계속 진행하라는 의미
- HTTP 1.1 버전부터 추가됨
2XX : Success (성공) - 클라이언트의 요청이 서버에서 성공적으로 처리
3XX : Redirection (리다이렉션) - 완전한 처리를 위해 추가 동작 필요
- 서버의 주소 또는 요청한 URI 웹 문서가 이동되었으니 그 주소로 다시 시도하라는 의미
4XX : Client Error (클라이언트 에러) - 없는 페이지를 요청하는 등, 클라이언트의 요청 메시지 내용이 잘못된 경우
5XX : Server Error (서버 에러) - 서버 사정으로 메시지 처리에 문제가 발생한 경우 (서버 부하, DB 처리과정 오류, 서버에서 익셉션이 발생한 경우)
💡
URI : 인터넷 상의 리소스 자원 자체를 식별, URL은 리소스의 위치를 나타냄
서버 익셉션 : 서버 예외 처리

 

📌1XX: Information (정보제공)

상태코드 상태텍스트  서버 측면 의미
1XX Imformation 정보제공 Client 요청을 받았고, 작업 진행중
- 1xx 계열의 응답은 HTTP/1.1 클라이언트에게만 보낼 수 잇으며 응답은 바디 없이 상태라인, 헤더(생략가능), 빈줄로 종료됨
100 Continue 계속 계속 진행해라
- Client는 요청 헤더에 'Expect: 100-countinue'를 보내고 서버는 이를 처리할 수 있으면 이 코드로 응답한다.
101 Switching Protocols 프로토콜 전환 프로토콜을 전환하라
- 프로토콜을 HTTP 1.1에서 업그레이드 할 때 Upgrade 응답 헤더에 표시, 현재는 HTTP 1.1이 최신이므로 사용할 일이 없다.
102 Processing 처리중 (WebDAV) 처리중이다.
서버가 처리하는데 오랜 시간이 예상되어 클라이언트에서 타임아우싱 발생하지 않도록 이 응답코드를 보낸다.
103~199 Unassigned   할당되지 않은 상태 코드

 

📌2XX: Success (성공)

상태코드 상태텍스트  서버 측면 의미
2XX Success 성공 클라이언트가 요청한 동작을 수신하여 이해하였고 승낙하였으며 성공적으로 처리하였음
200 OK 성공 서버가 요청을 성공적으로 처리함
201 Created 생성됨 요청이 처리되어서 새로운 리소스가 생성됨
- 응답헤더 Location에 새로운 리소스에 절대 URI를 기록
202 Accepted 허용됨 요청은 접수하였지만 처리가 완료되지 않음
- 응답헤더의 Location, Retry-After를 참고하여 클라이언트는 다시 요청을 보냄
203 Non-
Authoritative
Information
신뢰할 수 없는 정보 응답헤더가 오리지널 서버로부터 제공된 것이 아님
- 프록시 서버가 응답 헤더에 주석을 덧붙힌 경우가 하나의 예이다.
204 No Content 콘텐츠 없음 처리를 성공하였지만 클라이언트에게 돌려줄 콘텐츠가 없다
- 응답에는 헤더만 있고 바디는 없다. DELETE 요청에 대한 응답에 많이 사용된다,
205 Reset Content 콘텐츠 재설정 처리를 성공하였고 브라우저의 화면을 리셋해라.
- 예를들어 브라우저가 입력 폼을 보여주고 있을 때 이 응답 코드를 받으면 브라우저는 모든 입력 항목을 리셋하고 재입력 할 수 있는 상태가 된다.
206 Partial Content 일부 콘텐츠 콘텐츠의 일부만을 보낸다
- 응답 헤더의 Content-Range에 응답 콘텐츠의 범위를 기록한다. 1500바이트의 리소스 중에서 처음의 500바이트만을 보낼 때 사용한다
207 Multi-Status 다중상태 (WebDAV) 처리 결과의 상태가 여러 개이다.
207 응답은 성공을 뜻하지만 각각의 처리 결과가 성공인지는 바디값을 봐야 알 수 있다.
208~299 Unassigned   할당되지 않은 상태코드

 

📌3XX: Redirection (리다이렉션)

상태코드 상태텍스트  서버 측면 의미
3XX Redirection 리다이렉션 클라이언트는 요청을 마치기 위해 추가동작을 취해야 한다.
300 Multiple
Choices
여러선택항목 선택 항목이 여러개 있다
- 지정한 URI에 대해서 콘텐츠 협상을 수행한 결과 서버에서 콘텐츠를 결정하지 못하고 클라이언트에게 복수개의 링크를 응답할 때 사용
301 Moved
Permanently
영구 이동 지정한 리소스가 새로운 URI로 이동
- 이동할 곳의 새로운 URI는 응답 헤더 Location에 기록
302 Found 다른위치찾음 요청한 리소스를 다른 URI에서 찾음
- 요청한 URI가 없으므로 클라이언트 메소드를 그대로 유지한 채 응답 헤더 Location에 표시된 다른 URI로 요청을 재송신할 필요가 있다.
303 See Other 다른위치보기 다른 위치로 요청하라.
- 요청에 대한 처리 결과를 응답헤더 Location에 표시된 URI에서 GET으로 취득 가능
- 브라우저의 폼 요청을 POST로 처리하고 그 결과 화면으로 리다이렉트시킬때 자주 사용하는 응답코드
304 Not Modified 수정되지않음 마지막 요청 이후 요청한 페이지는 수정되지 않음
- If-Modified-Since와 같은 조건부 GET 요청일 때 지정한 리소스가 갱신되지 않았음을 의미, 이 응답코드에는 바디가 없다.
305 Use Proxy 프록시 사용 지정한 리소스에 액세스 하려면 프록시를 통해야 한다.
- 응답 헤더 Location에 프록시의 URI를 기록
306 Unused    
307 Temporary
Redirect
임시
리다이렉션
임시로 리다이렉션 요청이 필요
- 요청한 URI가 없으므로 클라이언트 메소드를 그대로 유지한 채 응답헤더 Location에 표시된 다른 URI로 요청을 재송신 할 필요가 있음
- 클라이언트는 향후 요청 시 원래 위치를 계속 사용해야함
308~399 Unassigned   할당되지 않은 상태코드

 

📌4XX: Client Error (클라이언트 에러)

상태코드 상태텍스트  서버 측면 의미
4XX Client Error 클라이언트 에러 클라이언트 요청에 오류가 있음
400 Bad Request 잘못된 요청 요청의 구문이 잘못되었다
- 클라이언트가 모르는 4XX 계열 응답 코드가 반환된 경우에도 클라이언트는 400과 동일하게 처리하도록 규정하고 있음
401 Unauthorized 권한 없음 지정한 리소스에 대한 엑세스 권한이 없다.
- 응답헤더 WWW-Authenticate에 필요한 인증 방식 지정
402 Payment Required 결제 필요 지정한 리소스를 엑세스 하기 위해서는 결제가 필요
403 Forbidden 금지됨 지정한 리소스에 대한 엑세스 금지
- 401 인증 처리 이외의 사유로 리소스에 대한 엑세스가 금지 되었음을 의미
- 리소스 존재 자체를 은폐하고 싶은 경우 404 응답코드 사용 가능
404 Not Found 찾을 수 없음 지정한 리소스를 찾을 수 없다.
405 Method Not Allowed 허용되지
않은 메소드
요청한 URI가 지정한 메소들르 지원하지 않음
- 응답 헤더 Allow에 이 URI가 지원하는 메소드 목록 기록
406 Not Acceptable 수용할 수 없음 클라이언트가 Accept 헤더에 지정한 항목에 관해 처리할 수 없다.
407 Proxy Authenticatoin Required 프록시
인증필요
클라이언트는 프록시 서버에 인증이 필요하다
- 프록시 서버의 응답헤더 Proxy-Authenticate에 필요한 인증 방식 지정
408 Request Timeout 요청시간초과 요청을 기다리다 서버에서 타임아웃
409 Conflict 충돌 서버가 요청을 수행하는 중에 충돌이 발생하였음
- 예를들어 사용자 명을 ted로 변경하려 했는데 이미 ted로 설정된 이름이 있을 경우, 응답헤더 Location에는 충돌이 발생한 리소스의 URI를 기록
410 Gone 사라짐 지정한 리소스가 이전에는 존재하였지만 현재는 존재하지 않음
- 예를들어 기간이 한정된 프로모션 사이트가 사용할 수 있는 응답코드
411 Length Required 길이 필요 요청헤더에 Content-length를 지정해야 함
412 Precondition Failed 사전조건실패 If-Match와 같은 조건부 요청에서 지정한 사전 조건이 서버와 맞지 않음
413 Request Entity Too Large 요청 객체가 너무 큼 요청 메시지가 너무 큼
- 서버는 접속을 끊는다
414 Request-URI Too Large 요청 IRO가 너무 긺 요청 URI가 너무 긺
415 Unsupprted Media Type 지원되지 않은 미디어 유형 클라이언트가 지정한 미디어 타입을 서버가 지원하지 않음
416 Range Not Satisfiable 처리할 수 없는 요청 범위 클라이언트가 리소스 범위가 서버의 리소스 사이즈와 맞지 않음
417 Expectiation Failed 예상 실패 클라이언트가 지정한 Expect 헤더를 서버가 이해할 수 없다
418~421 Unassigned   할당되지 않은 상태코드
422 Unprocessable Entity 처리할 수 없는 엔티티 (WebDAV) 클라이언트가 송신한 XML이 구문은 맞지만 의미상 오류
423 Locked 잠김 지정한 리소스는 잠겨 있음
424 Failed Dependency 의존관계로 실패 (WebDAV) 다른 작업의 실패로 인해 본 요청도 실패함
426 Upgraded Requried 업그레이트 필요 클라이언트의 프로토콜의 업그레이드 필요
428 Precondition Required 사전조건필요 If-Match와 같은 사전조건을 지정하는 헤더 필요
429 Too Many Requests 너무 많은 요청 클라이언트가 주어진 시간동안 너무 많은 요청을 보냄
431 Request Header Fields Too large 너무 큰 헤더 헤더의 길이가 너무 큼
444 Unavailable For Legal Reasons 법적 사유로 불가 법적으로 문제가 있는 리소스 요청
452~499 Unassigned   할당되지 않은 상태 코드

 

📌5XX: Server Error (서버 에러)

상태코드 상태텍스트  서버 측면 의미
5XX Server Error 서버에러 클라이언트의 요청은 유효한데 서버가 처리에 실패함
500 Internal Server Error 내부 서버 오류 서버에 에러가 발생함
501 Not Implemented 구현되지 않음 요청한 URI의 메소드에 대해 서버가 구현하고 있지 않음
502 Bad Gateway  불량 게이트 웨이  게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 잘못된 응답을 받음
503 Service Unabailabe 서비스 제공불가 현재 서버에서 서비스를 제공할 수 없음
- 보통은 서버의 과부하나 서비스 점검 등 일시적인 상태
504 Gateway Timeout 게이트웨이 시간초과 게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 응답을 기다리다 타임아웃이 발생함
505 HTTP Version Not Supported HTTP 버전 미지원 클라이언트가 요청에 사용한 HTTP 버전을 서버가 지원하지 않음
506 Unassigned   할당되지 않은 상태코드
507 Insufficient Storage 용량부족 (WebDAV) 서버에 저장공간 부족으로 처리실패
512~599 Unassigned   할당되지 않은 상태코드

 

 

📍 자주 쓰이는 상태 코드

200 OK 성공 서버가 요청을 성공적으로 처리함
201 Created 생성됨 요청이 처리되어서 새로운 리소스가 생성됨
- 응답헤더 Location에 새로운 리소스에 절대 URI를 기록
202 Accepted 허용됨 요청은 접수하였지만 처리가 완료되지 않음
- 응답헤더의 Location, Retry-After를 참고하여 클라이언트는 다시 요청을 보냄
400 Bad Request 잘못된 요청 요청의 구문이 잘못되었다
- 클라이언트가 모르는 4XX 계열 응답 코드가 반환된 경우에도 클라이언트는 400과 동일하게 처리하도록 규정하고 있음
401 Unauthorized 권한 없음 지정한 리소스에 대한 엑세스 권한이 없다.
- 응답헤더 WWW-Authenticate에 필요한 인증 방식 지정
403 Forbidden 금지됨 지정한 리소스에 대한 엑세스 금지
- 401 인증 처리 이외의 사유로 리소스에 대한 엑세스가 금지 되었음을 의미
- 리소스 존재 자체를 은폐하고 싶은 경우 404 응답코드 사용 가능
404 Not Found 찾을 수 없음 지정한 리소스를 찾을 수 없다.
500 Internal Server Error 내부 서버 오류 서버에 에러가 발생함
501 Not Implemented 구현되지 않음 요청한 URI의 메소드에 대해 서버가 구현하고 있지 않음
502 Bad Gateway  불량 게이트 웨이  게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 잘못된 응답을 받음

'보안 > WEB' 카테고리의 다른 글

[Web] HTTP Method 정리  (0) 2024.05.08
[Splunk] 수집 로그  (0) 2024.04.20
[DApp] 탈중앙화 애플리케이션  (0) 2024.04.14
[Naver] Lucy XSS Filter  (0) 2024.04.13