HTTP 6th Step

최보현·2022년 7월 19일

HTTP

목록 보기
6/8
post-thumbnail

모든 개발자를 위한 HTTP 웹 기본 지식 sec06

출처 : 모든 개발자를 위한 HTTP 웹 기본 지식

HTTP 상태코드

클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능

1xx: 요청이 수신되어 처리중 거의 안 씀
2xx: 요청 정상 처리
3xx: 요청을 완료하려면 추가 행동이 필요
4xx: 클라이언트 오류, 잘못된 문법등으로 서버가 요청 수행 불가
5xx: 서버 오류, 서버가 정상 요청을 처리하지 못함

모르는 코드가 나타나면? 상위 상태코드로 해석해서 처리(즉 그냥 맨 앞에 숫자보고 크게 분류해서 문제를 알아내자!)

2xx (성공)

200 OK
201 Created
202 Accepted
204 No Content

200 OK

요청 성공

201 Created

요청 성공해서 새로운 리소스가 생성됨

202 Accepted

요청이 접수되었으나 처리가 완료되지 않았음
배치 처리 같은 곳에서 사용 -> ex) 요청 접수 후 1시간 뒤에 배치 프로세스가 요청 처리

204 No Content

서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음
ex) 문서 편집기에 save 버튼 -> 버튼을 눌러도 같은 화면 유지, 결과 내용이 없어도 204메시지로 성공을 인식

3xx (리다이렉션)

리다이렉션이란? 웹 브라우저의 응답 결과에 Location 헤더가 있다면, Location 위치로 자동 이동

300 Multiple Choices
301 Moved Permanently
302 Found
303 See Other
304 Not Modified
307 Temporary Redirect
308 Permanent Redirect

영구 리다이렉션 (301, 308)

  • 특정 리소스의 URI가 영구적으로 이동
  • 원래의 URL 사용❌, 검색 엔진에서도 변경 인지
    301 -> 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거 될 수 있음
    308 -> 301과 기능은 같지만, 리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST유지)

일시적인 리다이렉션PRG(Post/Redirect/Get) (302, 307, 303)

  • 리소스의 URI가 일시적 변경 -> 검색 엔진 등에서 URL을 변경하면 안됨

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

현실적으로 많은 애플리케이션 라이브러리들이 기본값으로 사용(307, 303을 권장하긴 함)

307 -> 302와 기능은 같지만, 리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 절대 변경하면 안됨)

303 -> 302와 기능은 같지만, 리다이렉트시 요청 메서드가 GET으로 변경

PRG 예시

  • POST로 주문 후에 새로 고침으로 인한 중복 주문 방지
  • POST로 주문 후에 주문 결과 화면을 GET 메서드로 리다이렉트
  • 새로고침해도 결과 화면을 GET으로 조회
  • 중복 주문 대신에 결과 화면만 GET으로 다시 요청
  • URL이 이미 POST->GET으로 리다이렉트 되어서 새로 고침해도 GET으로 결과 화면만 조회

특수 리다이렉션 (304)

결과 대신 캐시 사용
304

  • 캐시를 목적으로 사용
  • 클라이언트에게 리소스가 수정되지 않았음을 알려줌 -> 클라이언트는 로컬 PC에 저장된 캐시를 재사용
  • 304 응답은 응답에 메시지 바디를 포함하면 안됨(로컬 캐시를 사용해야 해서)
  • 조건부 GET, HEAD 요청시 사용

4xx (클라이언트 오류)

400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found

오류의 원인이 클라이언트에 있음 => 클라이언트에서 이미 잘못 되어서 재시도를 해도 실패

400 Bad Request

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

  • 요청 구문, 메시지 등이 오류
  • 클라이언트에서 요청 내용을 다시 검토하고 보내야 함

401 Unauthorized

클라이언트가 해당 리소스에 대한 인증이 필요

  • 인증 되지 않음
  • 401 오류 발생시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명
    참고
  • 인증(Authentication) : 본인이 누구인지 확인(로그인)
  • 인가(Authorization) : 권한 부여, ex) ADMIN 권한 처럼 특정 리소스에 접근할 수 있는 권한, 인증이 있어야 인가가 있음
  • 오류 메시지가 Unauthorized 이지만 인증이 되지 않음

403 Forbidden

서버가 요청을 이해했지만 승인을 거부함

  • 주로 인증 자격 증명은 있지만, 접근 권한이 불충분한 경우

404 Not Found

요청 리소스를 찾을 수 없음
-> 요청 리소스가 서버에 없거나 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때

5xx (서버 오류)

500 Internal Server Error
503 Service Unavailable

서버 문제로 오류 발생 => 재시도 하면 성공할 수도 있음

500 Internal Server Error

서버 문제로 오류 발생, 애매하면 500 오류

503 Service Unavailable

서비스 이용 불가

  • 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없음
  • Retry-After 헤더 필드로 얼마 뒤에 복구되는지 보낼 수도 있음
profile
Novice Developer's Blog

0개의 댓글