모든 개발자를 위한 HTTP 웹 기본 지식 #05 - HTTP 상태코드

·2022년 11월 26일
0
post-thumbnail

인프런 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 수강하고 정리한 글입니다.'

HTTP 상태 코드


서버가 클라이언트 요청을 처리하고 난 후 상태에 따라 반환하는 코드.
Status code 첫번째 숫자에 따라 response class 가 달라진다.
(전체 코드는 참고 링크에서 확인하자)

 

1XX - Informational responses

요청을 받았으며 프로세스를 계속함.
// 영한님 : 실무에서 거의 사용안한다.. 하는걸 본적이없다.
100 Continue : 요청의 시작 부분이 받아들여졌으며 클라이언트는 계속 이어서 보내야 함
이미 요청을 완료한 경우에는 무시해도 됨
101 Switching Protocol : 요청 헤더의 Update 필드 중 하나로 서버가 프로토콜을 변경함
102 Processing : 서버가 요청을 수신하고 이를 처리하고 있으나 제대로 된 응답을 알려줄 수 없음

 

2XX - Successful responses

요청을 성공적으로 받았으며 인식했고 수용했음
// 실무에서 거의 200 201 정도 사용함. 개발과정에서 협의가 이루어져야함.
200 OK : 요청을 정상적으로 처리함
201 Created : 성공적으로 생성에 대한 요청을 받었으며 서버가 새 리소스를 작성함 (대개 POST, PUT일 때)
202 Accepted : 요청을 접수했지만 아직 처리하지 않음 (요청은 적절했음)
예를들면, 요청 접수 후 1시간 뒤에 배치 프로세스가 요청을 처리할 때!
203 Non-Authoritative Information : 요청을 성공적으로 처리했지만, 응답 페이로드 본문에 보낼 데이터가 없음.
예를들면, 문저 편집기에서 save 버튼같은것..
save 버튼 결과가 필요없고, 버튼을 눌러도 같은 화면을 유지해야하고..
204 No Content : 서버가 요청을 성공적으로 처리했지만 제공할 컨텐츠는 없음
205 Reset Content : 서버가 요청을 성공적으로 처리했지만 새로운 내용을 확인해야 함을 알려줌 (새로고침 등을 이용)
206 Partial Content : 서버가 GET 요청의 일부만 성공적으로 처리함 (Content-Range와 Date 헤더를 반드시 포함)

 

3XX - Redirection messages

클라이언트의 요청에 대해 적절한 위치를 제공하거나 대안의 응답을 제공
(리다이렉션 : 웹브라우저는 3XX응답 결과에 Location 헤더가 있으면, Location 위치로 자동 이동함 .. 리다이렉션은 하단에서 다루겠음. )
300 Multiple Choice : 클라이언트가 동시에 여러 응답이 가능한 요청을 보냈을 경우 클라이언트의 선택지를 반환

영구 리다이렉션

301 Moved Permanently : 요청한 리소스의 URI가 변경됨 -> 변경된 URI에 대한 정보와 함께 응답
리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(거의)

308 Permanent Redirect : 301과 기능이 같음. 리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지)

일시적 리다이렉션

리소스의 URI가 일시적으로 변경됐을때, 따라서 검색엔진등에서 URL을 변경하면 안됨
302 Found : 요청한 리소스의 URI가 일시적으로 변경된 것이므로 원래 요청했던 URI로 요청해야 함
리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)

307 Temporary Redirect : 302와 기능은 같다.
요청한 리소스의 URI가 일시적으로 변경된 것이므로 원래 요청했던 URI로 요청해야 함
리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다. MUST NOT)

303 See Other : 302와 기능은 같다.
리다이렉트시 요청 메서드가 GET으로 변경.
클라이언트가 요청한 작업을 하기 위해서는 다른 URI에서 얻어야 할 때 클라이언트에게 줌

기타 리다이렉션

300 Multiple Choices : 안.쓴.다.
304 Not Modified : 캐시를 목적으로 사용하며 클라이언트에게 리소스가 수정되지 않았음을 알려준다. 따라서 클라이언트는 로컬PC에 저장된 캐시를 재사용한다. (캐시로 리다이렉트 한다.)
304 응답은 응답에 메시지 바디를 포함하면 안된다. (로컬 캐시를 사용해야 하므로)
조건부 GET, HEAD 요청 시 사용한다.

 

4XX - Client error responses

클라이언트의 잘못된 요청 (클라이언트가 요청을 다시 검토해서 보내야 함) (스펙, 인증 문제가 가장 많음!)
400 Bad Request : 잘못된 문법으로 요청을 보내고 있어 서버가 이해할 수 없음
401 Unauthorized : 요청을 위해 권한 인증이 필요함 (ex. 토큰이 없음)(오류 등답에 WWW-Authenicate헤더와 함께 인증 방법을 설명)
402 Payment Required : 결제 시스템을 위해 만들어졌으나 현재는 사용하지 않음
403 Forbidden : 서버가 요청을 이해했지만, 승인을 거부함. 클라이언트가 요청한 컨텐츠에 대해 접근할 권리가 없음 (신원 인증은 되었지만 권한은 없음)
404 Not Found : 요청한 URI를 찾을 수 없음 (권한이 부족한 리소스에 접근할 때 숨기고 싶을때도 사용)

 

5XX - Server error responses

서버의 설정, 코드 등의 문제로 오류가 났을 때 반환 (재시도했을때 성공할수도 있음)
500 Internal server error : 내부 서버 오류, 보통 서버 코드의 문제 시 반환되는 응답 코드 (백엔드 애매한 오류 대체적으로 포함)
501 Not implemented : 웹 서버가 처리할 수 없음 (구현되지 않음)
502 Bad Gateway : 서버가 게이트웨이로부터 잘못된 응답을 수신했음을 의미
503 Service unnailable : 서비스 제공 불가, 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없음
504 Gateway timeout : 게이트웨이 시간 초과로 적시에 응답을 받을 수 없음
505 HTTP version not supported : 해당 http 버전 지원되지 않음

 

리다이렉션

웹브라우저는 3XX응답 결과에 Location 헤더가 있으면, Location 위치로 자동 이동한다.

리다이렉션을 해주는 경우는 언제가 있을까?
아주 간단히, 페이지 경로가 바뀌었을경우에 redirect를 해준다.

기존 경로 : event
바뀐 경로 : new-event

서버는 event로 요청이 오면, 바뀐 URL이기에 브라우저에 다시 301 응답 코드 + new-event Location을 준다.
그러면 브라우저는 new-event 경로로 다시 서버에 요청을 하고 서버는 새 url기준으로 응답을 준다.

리다이렉션의 이해

  • 영구 리다이렉션 - 특정 리소스의 URI가 영구적으로 이동했을때
    .예) /members -> /users
    .예) /event -> /new-event
  • 일시 리다이렉션 - 일시적인 변경
    .주문 완료 후 주문 내역 화면으로 이동
    .일시적 리다이렉션은 언제쓸까? PRG: Post/Redirect/Get
    상품주문페이지에서 POST로 주문 후 새로고침 할 경우 중복 주문이 들어갈 수 있다

    그런 문제를 방지하기위해, POST주문 후 주문 결과 화면을 GET메서드로 리다이렉트. (새로고침해도 결과 화면을 GET으로 조회, 즉 중복 주문 대신 결과 화면만 GET으로 다시 요청)
  • 특수 리다이렉션
    .캐시와 관련
    .결과 대신 캐시를 사용

📚 참고

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

profile
삶을 스스로 통제하고 있다는 느낌을 받을 때 더 행복하고 성공한다.🍃

0개의 댓글