소개

클라이언트가 서버에 HTTP 요청을 보내면, 그리고 서버가 그 요청을 잘 받았다면, 서버는 반드시 클라이언트에게 그 요청이 성공적으로 처리됐는지 아닌지 알려줘야함

 

HTTP 상태 코드 요약

100-level (정보): 서버가 요청을 알아 들었습니다.

200-level(성공): 서버가 요청을 예상한대로 완료했습니다.

300-level(리다이렉션): 요청을 완료하려면 클라이언트의 추가작업이 필요합니다.

400-level(클라이언트 에러): 클라이언트가 유효하지않은 요청을 했습니다.

500-level(서버 에러): 서버가 서버 에러 때문에 유효한 요청을 수행하지 못했습니다.

 

HTTP 상태 코드 상세

100 - 199 : 정보성 상태 코드

정보성 상태 코드는 HTTP/1.1 에서 도입되어 비교적 새로운 것이며, 복잡함을 감수할 만큼 가치가 있는지에 대해 논란이 되고 있다.

  • 100 : 요청의 시작 부분 일부가 받아들여졌으며, 클라이언트는 나머지를 계속 이어서 보내야 함을 의미함
  • 101 : 요청자가 서버에 프로토콜 전환을 요청했으며, 서버에서 이를 승인하는 중을 의미함

200 - 299 : 성공 상태 코드

클라이언트가 요청을 보내면, 요청은 대게 성공함. 서버는 대응하는 성공을 의미하는 각각의 요청에 대응한다.

  • 200 : 요청은 정상이고, 본문은 요청된 리소스를 포함하고 있다.
  • 201 : 어떠한 생성 작업을 요청받았으며, 생성 작업을 성공하였다.
  • 202 : 요청은 받아들여졌으나, 아직 동작을 수행하지 않은 상태로 요청이 적절함을 의미함
  • 203 : 요청을 성공하였지만, 요청에 대한 검증이 되지 않은 상태를 의미함
  • 204 : 요청을 성공하였지만, 제공할 내용이 없음을 의미
  • 205 : 204와 동일하지만 새로고침등을 통해 새로운 내용등을 확인할것을 추가로 의미
  • 206 : 요청의 일부분만 성공하였음을 의미

300 - 399 : 리다이렉션 상태 코드

클라이언트에 요청에 대해 적절한 다른 위치를 제공하거나, 대안의 응답을 제공한다.

  • 300 : 클라이언트가 동시에 여러 응답을 가리키는 URL을 요청한 경우 응답 목록과 함께 반환된다.(ex] 어떠한 HTML에 문서에 대한 영문페이지와 불어페이지를 요청)
  • 301 : 요청한 URL이 옮겨졌을 때 사용. 옮겨진 URL에 대한 정보와 함께 응답되어야 한다.
  • 302 : 301과 동일하나, 클라이언트는 여전히 옮겨지기전 URL로 요청할것을 의미
  • 303 : 요청받은 행동 수행을 위해서는 다른 URL로 요청 해야함을 의미
  • 304 : 이전의 동일한 요청과 비교하여 변화가 없음을 의미(단시간에 반복된 동일 요청에 대한 대응 코드)
  • 305 : 직접적인 요청이 아니라 반드시 프락시(우회경로)를 통해 요청되어야 함을 의미
  • 307 : 302와 동일하며, HTTP Method도 변경없이 요청하여야 함을 의미

400 - 499 : 클라이언트 에러 상태 코드

클라이언트의 잘못된 요청에 대한 대응 코드

  • 400 : 클라이언트가 올바르지 못한 요청을 보내고 있음을 의미
  • 401 : 요청을 위해서는 권한 인증등을 요구함을 의미
  • 403 : 요청이 서버에 의해 거부 되었음을 의미, 서버는 거부 이유를 포함하여 응답할 수 있지만, 보통은 거부 이유를 숨기고 싶을 때 사용된다.
  • 404 : 요청한 URL을 찾을 수 없음을 의미
  • 405 : 요청한 URL이 Method를 지원하지 않음을 의미(ex] POST요청에 대한 응답을 하는 URL에 GET으로 요청)
  • 406 : 클라이언트 요청에 대해 적절한 컨텐츠가 없음을 의미
  • 407 : 401과 동일하나, 프락시(우회경로)를 통하여 인증 할 것을 요구함을 의미
  • 408 : 요청에 응답하는 시간이 너무 많은 시간이 걸림을 의미(서버는 요청을 끊을수 있음)
  • 409 : 클라이언트 요청에 대해 서버에서 충돌 요소가 발생 할수 있음을 의미
  • 410 : 요청한 URL이 더 이상 사용되지 않고 사라졌음을 의미
  • 411 : 클라이언트 요청에 Content-length 헤더가 포함되어야 함을 의미
  • 412 : 클라이언트가 조건부 요청을 했는데 그중 하나가 실패하였음을 의미
  • 413 : 요청이 너무 커서 서버가 처리 할 수 없음을 의미
  • 414 : 요청 URL이 너무 길어 처리 할 수 없음을 의미
  • 415 : 서버가 이해 하지 못하는 유형의 컨텐츠를 요청 하였음을 의미
  • 416 : 클라이언트의 요청 내용이 범위가 잘못되었음을 의미
  • 417 : 클라이언트 요청 헤더의 Expect에 대해 서버가 만족 하지 않음을 의미

500 - 599 : 서버 에러 상태 코드

올바른 클라이언트 요청에 대해 서버의 문제로 응답 할 수 없음을 의미

  • 500 : 서버에 오류가 발생하여 응답 할 수 없음을 의미
  • 501 : 클라이언트 요청에 대한 서버의 응답 수행 기능이 없음을 의미(ex] 서버가 지원하지 않는 새로운 Method를 사용하여 요청 - GET2, POST2...)
  • 502 : 프락시나 게이트웨이등의 서버에서 응답하며, 서버의 모(엄마)서버에서 오류가 발생하였음을 의미
  • 503 : 현재 서버가 유지보수 등의 이유로 일시적인 사용 불가함을 의미
  • 504 : 서버에서 다른 서버로 요청을 보냈으나, 응답 지연이 발생하여 처리가 불가함을 의미
  • 505 : 서버가 지원할 수 없거나 올바르지 못한 프로토콜로 요청을 받았음을 의미

 

HTTP ERROR Handling

400 Bad Request - 클라이언트가 유효하지 않은 요청을 보낸 경우 (request body나 파라미터를 빼먹은 경우같이)

401 Unauthorized - 해당 서버에 클라이언트 인증이 실패한 경우

403 Forbidden - 클라이언트가 인증은 됐지만 요청한 자원에 대한 권한은 없는 경우 (예를 들어 로그인된 사용자가 관리자 페이지에 접근하는 경우)

404 Not Found - 요청한 자원이 존재하지 않는 경우

412 Precondition Failed - Request Header 필드 중 한 개 이상의 값이 잘못 된 경우

500 Internal Server Error - 서버에서 발생된 일반적인 에러

503 Service Unavailable - 요청된 서비스가 이용가능하지 않는 경우

 

500ERROR는 클라이언트에게 보여주면 안됨

-> 서버 내부 에러는 클라이언트의 비즈니스가 아님

-> 내부 에러를 처리하거나 캐치해서 404로 대체

 

에러 리스트화

{ 
	"errors": [ 
    	{ 
        	"error": "auth-0001", 
        	"message": "Incorrect username and password", 
            "detail": "Ensure that the username and password included in the request are correct", 
            "help": "https://example.com/help/error/auth-0001" 
    	}, 
        ...
	] 
}

 

결론

- 특정 상태코드 내리기

- 응답 바디에 추가적인 정보를 담아주기

- 통일된 방식으로 에러 처리하기


코드 첨부 : sanghaklee.tistory.com/61

반응형

'전산 > Network' 카테고리의 다른 글

AWS EC2  (0) 2021.02.05
Amazon S3  (0) 2021.02.05
Git Command  (0) 2021.02.04
HTTP Method : GET, POST, OPTIONS  (0) 2021.02.03
GET 과 POST의 차이  (0) 2021.02.01
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기