1xx (Informational): 조건부 응답으로, 요청이 현재 처리중인 상태
2xx (Successful): 성공
- 200 OK: 요청을 정상적으로 처리했음을 의미
- 201 Created: 요청이 성공하고 새로운 리소스가 생성 됨
3xx (Redirection): 리다이렉션 완료
- 301 Moved Permanently: 요청한 리소스의 URI가 영구적으로 변경되었음을 의미하며, 새로운 Location 정보 제공
- 302 Found: 요청한 리소스의 URI가 일시적으로 변경되었음을 의미하며, 새로운 Location 정보 제공
- 304 Not Modified: 요청한 리소스가 수정되지 않아서 본래 서버가 아닌 프록시 서버로부터 캐싱 된 정보를 클라이언트에게 제공
4xx (Client Error): 요청 오류
- 400 Bad Request: 클라이언트의 요청이 잘못 됨
- 401 Unauthorized: 클라이언트의 인증이 되지 않았음
- 404 Not Found: 요청한 정보를 서버에서 찾을 수 없음을 의미
- 대부분 프레임워크에서는 경로(라우팅)에 대한 에러 처리를 자동으로 해준다.
존재하지않는 URL 요청 같은 경우 자동으로 404로 응답하게 되고 개발자가 관리할 필요가 없다.
5xx (Server Error): 서버 오류
- 500 Internal Sever Error: 서버에 오류가 발생하여 해당 요청을 처리할 수 없는 상태
- 502 Bad Gateway: 게이트웨이 또는 프록시서버에 오류 발생
- 504 Gateway Timeout: 게이트웨이 또는 프록시서버가 정해진 Timeout시간동안 클라이언트의 요청을 처리 못함
- 301 Move permanently: 새로운 URL로 영원히 이동되었으니, 검색 엔진은 기존 URL에 대한 사이트 랭크와 평가점수와 같은 모든 SEO 값과 링크 리소스를 New URL 로 이전하며, 페이지에 대한 정보도 New URL 페이지만을 수집하게 된다.
- 302 Found: 요청한 정보가 일시적으로 옮겼다는 의미이므로, 검색 엔진은 사이트 랭크와 평가점수와 같은 모든 SEO 값과 링크 리소스를 옮기지 않고 유지하며, 컨텐츠만 New URL에서 조회하도록 한다. (Old URL 페이지에 대한 정보를 수집)
- 배달 이나 쇼핑 어플리케이션에서 주문이 끝난 후 자동으로 주문이 완료되었음을 알리는 결과 화면으로 이동하게 되는 동작
- 쇼핑몰 사이트에서 POST를 통해 주문을 요청하고, 브라우저를 새로고침하게 되면, 또다시 POST 요청이 이루어져서 중복 주문이 발생할 수 있다.
- If-Modified-Since 헤더가 있으면, 서버는 브라우저가 파일에 마지막으로 액세스한 이후 파일이 편집되었는지 확인
- 파일이 수정된 상태라면, 서버는 클라이언트에 새 파일 복사본을 반환 (200 OK)
- 파일이 최신 상태라면, 브라우저는 캐시(Proxy server)에서 콘텐츠 반환 (304 Not Modified)
요청 구문, 메시지, API 스펙 불일치 등의 문법 오류로 인한 문제로 발생
해결하기 위해서는 클라이언트가 자신의 요청을 검토하고 재전송하여야 한다.
서버는 상태 코드와 더불어 바디에 에러 이유를 구체적으로 명시하고 응답하는 것이 좋다.
- 파라미터, 사용자 입력 값, 에러 이유를 구체적으로 명시하는 것이 재빠르게 클라이언트측에서 수정할 수 있도록 도와준다.
- 백엔드에서는 다양한 형태의 서버 문제들에 대하여 500 응답으로 통일해서 응답한다.
- URL을 사용하여 데이터를 요청하며, 요청의 파라미터는 URL에 포함
- 캐싱 가능
- URL에 데이터가 노출되므로 민감한 정보(예: 아이디, 비밀번호)는 GET 요청의 URL 파라미터로 전송하지 않는다.
- HTTP message body에 데이터를 담아 요청
- URL 기반으로 요청하지 않기 때문에 브라우저에 기록이 남지 않는다.
- 사용자 이름, 비밀번호와 같은 민감한 정보를 안전하게 전달하는 데 적합
- POST 요청은 HTTP body를 이용하므로 XML, JSON, 문자열, 바이너리 데이터 등 다양한 형태의 데이터를 전달
PUT: 업데이트를 위한 HTTP 요청 메서드
- 업데이트하는 데이터의 전체를 서버에 전송하여 리소스 전체를 업데이트
- 해당 리소스가 없는 경우에는 새로 생성
- 과정: 요청을 보낼 때 전체 데이터를 서버에 전송 → 요청 데이터와 실제 데이터를 수정 후 새롭게 생성된 데이터로 전체 교체
- {a : 3, b : 4}에서 b → 5로 수정
- {a : 3, b : 5} 요청
- 데이터의 일부를 전송하면 전송하지 않은 값들은 NULL값으로 대체
PATCH: 업데이트를 위한 HTTP 요청 메서드
- 업데이트하는 데이터의 일부분만 서버에 전송하여 리소스의 일부만 업데이트
- 과정: 요청을 보낼 때 수정하고자 하는 데이터의 일부분만 서버에 전송 → 일부분의 데이터만 교체
- {a : 3, b : 4}에서 b → 5로 수정
- {b : 5} 요청
- 리소스를 효율적으로 업데이트하고 필요한 변경 사항만 전송
DELETE: 지정된 리소스를 삭제
- DELETE 요청이 성공하면 일반적으로 200 OK 또는 204 No Content 상태 코드가 반환
- 리소스가 존재하지 않으면 404 상태 코드 반환