BackEnd/WEB

[HTTP] HTTP 상태 코드

샤아이인 2022. 2. 1.

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다.

 

 

1. 2xx - 성공

● 200 OK

가장 단순한 상태코드이다. Client에서 어떤 처리를 서버에 요청했을때, 정상적으로 처리되었다면 보통 200을 상태코드로 보여준다.

 

● 201 Created

클라이언트의 요청이 성공하여 서버쪽에서 새로운 리소스가 생성되었을때 201로 응답해준다.

POST로 신규 리소스 등록을 요청할때 서버 쪽에서 등록하여 URI를 정하고, 클라이언트에게 반환해 주는 컬렉션 방식에 사용된다.

 

● 202 Accepted

클라이언트의 요청이 접수되었으나, 아직 처리가 완료되지 않았을때 사용한다.

배치처리 같은곳에서 주로 사용하며, 요청 접수 후 1시간 뒤 배치 프로세스가 요청을 처리한다고 할때 202 를 보내준다.

 

● 204 No Content

서버가 요청을 성공적으로 수행했지만, 응답 페이지의 body에 보낼 데이터가 없을때 사용한다.

 

예를들어 네이버 블로그같은 곳에서 문서 편집을 할때 저장 버튼을 누르면 내용이 서버에 전달되어 저장이 완료된다.

이후 서버는 클라이언트에게 정상적으로 저장되었다고만 알리면 된다. 따로 body에 보낼 내용은 없다.

결과 내용이 없어도 204 메시지만으로 성공을 인식할 수 있다.

 

2. 3xx - 리다이렉션

웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있다면, Location의 위치로 자동 이동(redirection)하게 된다.

 

영구 리다이렉션 - 특정 리소스의 URI가 영구적으로 이동하게 된다.

- 예) /members -> /users

- 예) /event -> /new-event (예전 이벤트 페이지에 접속했더니, 신규 이벤트 페이지로 바로 이동하게 되는 상황)

 

일시 리다이렉션 - 일시적인 변경

- 주문 완료 후 주문 내역 화면으로 이동하게됨

- PRG: Post/Redirect/Get

 

특수 리다이렉션

- 결과 대신 캐시를 사용 (결과 값을 반환해주는 것이 아니라, 캐시해둔 기존의 값을 사용해도 된다고 서버가 클라이언트에게 알려주는것)


 

● 영구 리다이렉션

리소스의 URI가 영구적으로 이동하며, 검색 엔진에서도 변경을 인지하게 된다.

 

- 301 Moved Permanently

리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될수도 있다.

출처 - 인프런 김영한 HTTP

- 308 Permanent Redirect

301과 기능은 같지만, 리다이렉트시 요청 메서드와 본문을 유지하게 된다. (처음 보낼때 POST 보냈다면 POST 유지)

이 방식은 실질적으로 거의 사용하지 않는다 하셨다.

 

3. 3xx - 일시적인 리다이렉션, 특수 리다이렉션, PRG

일시적인 리다이렉션은 URI가 일시적으로 변경되는 것을 말한다. 따라서 검색 엔진에서 URL을 변경하면 안된다.

 

● 302 Found

- 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있다.

 

● 307 Temporary Redirect

- 302와 기능은 같지만, 리다이렉트시 요청 메서드와 본문 유지한다. (요청 메서드를 변경하면 안된다. MUST NOT)

 

● 303 See Other

- 302와 기능은 같다. 하지만 리다이렉트시 요청 메서드가 무조건 GET으로 변경된다.

 

RPG: Post/Redirect/Get

POST로 주문한 후, 웹 브라우저에서 새로고침을 한다면? 새로 고침을 했다면 POST요청이 다시 전달되게되고, 이는 중복 주문이 된다.

 

PRG 사용 전의 상황을 살펴보자.

출처 - 인프런 김영한 HTTP

위의 그림은 PRG가 적용되지 않은 예시인데, 처음 POST로 요청했을때 200 OK를 받아 결과 화면에 그대로 남아있게된다.

따라서 새로고침을 한다면 이전의 POST 요청이 다시 전송되는 것 이다. 이러면 주문이 중복되어 버린다.

 

이번에는 PRG가 적용된 상황을 살펴보자.

출처 - 인프런 김영한 HTTP

처음 POST로 주문을 요청했을때 정상적으로 서버에서 주문이 완료된 후, 302 Found로 응답하여 /order-result/19로 리다이렉션 시켰다.

따라서 사용자는 /order-result/19 페이지로 이동하게 되고, 여기서 새로고침을 해봤자 GET으로 결과 화면만 재요청할 뿐이다.

 

● 정리

302 Found : Get으로 변할 수 있음(거의 변한다고 생각하면 됨)

307 Temporary Redirect : 메서드가 변하면 안됨

303 See Other : 메서드가 GET으로 변경

 

● 300 Multiple Choices => 안쓴다.

 

● 304 Not Modified

캐시를 목적으로 사용하며, 클라이언트에게 리소스가 수정되지 않았음을 알려준다.

따라서 클라이언트는 로컬PC에 저장된 캐시를 재사용한다. (캐시로 리다이렉트 한다.)

또한 304 응답은 응답 메시지의 바디가 있으면 안된다. 캐시를 사용하라고 하는데 바디는 필요가 없다.

조건부 GET, HEAD 요청시에 사용된다.

 

4. 4xx - 클라이언트 오류, 5xx - 서버 오류

4xx대 오류는 클라이언트의 요청에 잘못된 문법등이 있어 서버가 요청을 수행할 수 없는것을 말한다.

=> 오류의 원인이 클라이언트 이다!

따라서 잘못된 클라이언트의 오류가 있는데, 계속 같은 요청을 해봤자 계속 실패하게 된다.

 

● 400 Bad Request

클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음

- 요청 구문, 메시지 등등 오류

- 클라이언트는 요청 내용을 다시 검토하고, 보내야한다. 아니면 계속 실패하게 된다.

- 예) 요청 파라미터가 잘못되거나, API 스펙이 맞지 않을 때

 

● 401 Unauthorized

쉽게 생각하면 로그인이 안됬을때를 말한다. => 인증 (Authentication) 되지 않아 발생하는 클라이언트 오류이다.

또한 401 오류 발생시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명해준다.

 

(ps 인증(Authentication) 과 인가(Authorization)은 다르다. 인가는 특정 리소스에 접근할수 있는 권한을 말한다)

 

● 403 Forbidden

서버가 요청을 이해했지만 승인을 거부하는 상황이다. 주로 인증 자격 증명은 있지만, 접근 권한이 불충분한 경우이다.

예를 들어 어드민 등급이 아닌 사용자가 로그인은 했지만, 어드민 등급의 리소스에 접근할려 드는 경우에 해당된다.

 

● 404 Not Found

요청한 리소스를 찾을 수 없을때 보여준다.

 

5xx 대 오류는 Server Error를 의미한다. 서버에 문제가 있기 때문에 당장은 오류가 나더라도, 나중에 재시도 하면 성공할 수 있다.

 

● 500 Internal Server Error

서버 문제로 오류가 발생했을때 애매하다 싶으면 500 오류를 보여주면 된다.

 

● 503 Service Unavailable

서버가 일시적인 과부하로 다운됬거나, 예정된 업데이트로 잠시 꺼져있을때 요청 처리를 할수 없을때 보여준다.

Retry-After 헤더 필드로 얼마뒤에 복구되는지 보낼 수도 있다.

'BackEnd > WEB' 카테고리의 다른 글

[HTTP] HTTP 헤더 - 캐시와 조건부 요청  (0) 2022.02.03
[HTTP] HTTP 헤더 - 일반헤더  (0) 2022.02.02
[HTTP] HTTP 메서드 활용  (0) 2022.01.31
[HTTP] HTTP 메서드  (0) 2022.01.28
[HTTP] HTTP 기본  (0) 2022.01.27

댓글