반응형
상태 코드란?
클라이언트가 보낸 요청의 처리 상태를 읍답에서 알려주는 기능
- 1xx (Informational): 요청이 수신되어 처리중 (거의 사용 안함)
- 2xx (Successful): 요청 정상 처리
- 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요
- 4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청할 수 없음
- 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함
2xx - 성공
- 200 OK
- 201 Created
- 클라이언트가 요청한 것을 서버가 리소스 같은것들 생성
(보통 POST로 생성할 때 사용하면 된다.) - 생성된 리소스는 응답의 Location 헤더 필드로 식별한다.
(Location: 리소스 URI 넣어주기) -> HTTP 헤더
- 클라이언트가 요청한 것을 서버가 리소스 같은것들 생성
- 202 Accepted (요청이 접수되었으나 처리가 완료되지 않았다.)
- 배치 처리 같은 곳에서 사용
- Ex) 요청 접수 후 시간을 두고 배치 프로세스가 요청을 처리할 때
- 204 No Content (서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없다.)
- EX) web 문서 편집기에서 save 버튼
- 데이터가 POST로 서버로 넘어가면 서버에서 저장하고 응답을 내려줄게 없다. 저장됬다는 것만 받으면 되지 본문내용을 따로 받을 필요가 없다.
- save 버튼 결과로 아무 내용이 없어도 되고, 같은 화면을 유지할 때
- 결과 내용이 없어도 204 메시지(2xx) 만으로 성공을 인식할 수 있다.
- EX) web 문서 편집기에서 save 버튼
3xx - 리다이렉션
요청을 완료하기 위해 유저 에이전트의 추가 조치 필요
사용자 에이전트(user agent)는 사용자를 대표하는 컴퓨터 프로그램으로, 웹 맥락에선 브라우저를 의미합니다. 브라우저 외에도 웹 페이지를 긁어가는 봇, 다운로드 관리자, 웹에 접근하는 다른앱도 사용자 에이전트입니다.
- 300 Multiple Choices
- 301 Moved Permanently
- 302 Found
- 303 See Other
- 304 Not Modified
- 307 Temporary Redirect
- 308 Permanent Redirect
리다이렉션 이해
웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동 된다. (리다이렉트)
- 요청
GET/event HTTP/1.1
Host: localhost:8080
- 응답
HTTP/1.1 301 Moved Permanently
Location: /new-event
- 자동 리다이렉트
URL: localhost:8080/event -> URL: localhost:8080/new-event
- 요청
GET/new-event HTTP/1.1
Host: localhost:8080
- 응답
HTTP/1.1 200 OK
...
리다이렉션 종류
- 영구리다이렉션 - 특정 리소스의 URI가 영구적으로 이동
- Ex) /members -> /users
- Ex) /event -> /new-event
- 일시 리다이렉션 - 일시적인 변경
- 주문 완료 후 주문 내역 화면으로 이동
- PRG: Post/Redirect/Get
- 특수 리다이렉션
- 결과 대신 캐시를 사용클라이언트 캐시 기간이 만료된거 같아서 클라이언트가 서버에 캐시가 만료된것인지 물어보고 캐시와 관련된 캐시 생성일자나 정보를 서버한테 넘겨주고 서버가 확인 후 캐시 그대로 사용하고 캐시로 다시 조회해 라고 서버가 응답을 보낼때 사용
영구 리다이렉션 (301, 308)
리소스의 URI가 영구적으로 이동한다.
원래의 URL를 사용X, 검색 엔진 등에서도 변경을 인지한다.
- 301 Moved Permanently
- 리다이렉트시 요청 메서드가 GET으로 변하고(POST요청 -> GET요청), 본문이 제거될 수 있다.
- 308 Permanent Redirect
- 301과 기능은 같지만 리다이렉트시 요청 메서드와 본문 유지
(POST요청 -> POST요청 내부에 HTTP body에 보낸 데이터 유지)
301
- 요청(POST 요청)
POST/event HTTP/1.1
Host: localhost:8080
name=uhanuu&age=24
- 응답
HTTP/1.1 301 Moved Permanently
Location:/new-event
- 자동 리다이렉트
URL:/event -> URL:/new-event
- 요청 (GET으로 변경, 메시지 제거)
GET/new-event HTTP/1.1
Host: localhost:8080
- 응답
HTTP/1.1 200 OK
...
이러면 다시 POST로 /new-event 로 값을 넣어주어야 된다.
(308을 사용해서 이런 문제 해결하기)
308
- 요청(POST 요청)
POST/event HTTP/1.1
Host: localhost:8080
name=uhanuu&age=24
- 응답
HTTP/1.1 308 Permanent Redirect
Location:/new-event
- 자동 리다이렉트
URL:/event -> URL:/new-event
- 요청 (POST 유지, 메시지 유지)
POST/new-event HTTP/1.1
Host: localhost:8080
name=uhanuu&age=24
- 응답
HTTP/1.1 200 OK
...
실무에서는 URI 위치가 바뀌면 내부에서 전달하는 데이터도 다 바뀌기 때문에 301써서 POST써도 GET으로 다시 돌리는게 좋다.
반응형
'Web' 카테고리의 다른 글
OAuth2(Open Authorization) (0) | 2023.04.08 |
---|---|
Redis(Remote Dictionary Server) (0) | 2023.03.30 |
JWT(Json Web Token) (0) | 2023.03.23 |
HTTP 메소드 (0) | 2022.12.29 |
상태 코드(2) (0) | 2022.12.29 |