티스토리 뷰
HTTP Status
HTTP Status 말 그대로 상태를 알려주는 응답 코드들인데
서버에서 클라이언트에게 이 코드들로 응답을 하여 서버와의 통신이 성공적이었는지, 어떠한 문제가 있는지 알려준다
응답은 5개의 그룹으로 나눠져 있다
1XX: Information Response (응답 - 요청이 수신되어 처리 중 / 거의 사용하지 않는다고 함)
100: Continue
진행 중임을 나타내며, 현재까지 진행상태에 문제가 없으며 클라이언트가 계속해서 요청을 하거나
이미 요청을 완료한 경우에는 무시해도 된다
101: Switching Protocol
클라이언트에 의해 보낸 업그레이드 요청 헤더에 대한 응답으로 보내진다
이 헤더에 들어가며 서버에서 프로토콜을 변경할 것을 알려준다, 101 코드 같은 경우 Websocket 프로토콜 전환 시에 사용된다
102: Processing(WebDAV)
서버가 요청을 수신하였으며 이를 처리하고 있지만, 아직 제대로 된 응답을 알려줄 수 없을 때 사용한다
2XX: Successful Response (성공적인 응답 - 요청 정상 처리)
성공적인 요청에 대한 응답이다, 성공의 의미는 HTTP 메서드에 따라 달라진다
GET: 리소스를 불러와서 메시지 바디에 전송되었습니다.
HEAD: 개체 해더가 메시지 바디에 있습니다.
PUT 또는 POST: 수행 결과에 대한 리소스가 메시지 바디에 전송되었습니다.
TRACE: 메시지 바디는 서버에서 수신한 요청 메시지를 포함하고 있습니다.
201: Created
요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었음
이 응답은 보통 POST 또는 일부 PUT 요청에 대한 응답으로 사용된다
202: Accepted
요청이 접수되었으나 처리가 완료되지 않았음
배치 처리 같은 곳에서 사용한다
예) 요청 접수 후 1시간 뒤에 배치 프로세스가 요청을 처리 함
204: No Content
서버가 요청을 성공적으로 수행했지만 응답에 보낼 데이터가 없음
3XX: Redirection Response (리다이렉션 - 요청을 완료하려면 추가 행동이 필요)
웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면 그 위치로 자동 이동하는데
이것을 리다이렉션이라고 하는데 이는 아래와 같이 나뉜다
영구 리다이렉션
-특정 리소스의 URI가 영구적으로 이동
예) /members -> /users
301: Moved Permanently
요청한 리소스의 URI가 변경되었음을 의미한다
리다이렉트 시 요청 메서드가 GET으로 변하고 본문이 제거될 수 있다
308: Permanent Redirect
301과 기능은 같지만 리다이렉트시 요청 메서드와 본문을 유지한다
예) 처음 POST를 보내면 리다이렉트도 POST를 유지한다
일시 리다이렉션
-리소스의 URI가 일시적으로 변경된다 따라서 검색 엔진 등에서 URL을 변경하면 안 된다
302: Found
요청한 리소스의 URI가 일시적으로 변경되었음을 의미한다
새롭게 변경된 URI는 나중에 만들어질 수 있으며 이후의 요청도 동일한 URI어야 한다
리다이렉트 시 요청 메서드가 GET으로 변하고 본문이 제거될 수 있다
303: See Other
302와 기능은 같다 리다렉트시 요청 메서드가 GET으로 변경된다
307: Temporary Redirect
302와 기능은 같다 리다이렉트 시 요청 메서드와 본문을 유지하는데 이중 요청 메서드는 꼭 유지하여야 한다
PRG Pattern: Post/Redirect/Get 패턴
권장되는 디자인 패턴 중 하나로, HTTP POST 요청에 대한 응답이 또 다른 URL로의 GET 요청을 위한
리다이렉트(3XX status)이어야 한다는 패턴이다, 이 패턴이 필요한 이유를 예를 들어 설명하자면
만약 상품 주문을 하고 나서 그 상태로 웹 브라우저를 새로고침 하게 되면 당연히 POST 요청이 다시 가게 되고 중복 주문이 발생한다
이런 중복 주문이 생기는 것을 방지하기 위해서 Post -> Redirect -> Get 패턴을 사용하면
Get 메서드로 리다이렉트 되었기 때문에 새로고침을 한다한들 GET메서드가 요청되지 POST로 인한 중복 주문은 없다
PRG 패턴의 핵심은 브라우저가 이해할 수 있는 3XX 응답 코드를 통해 POST를 통해 요청했던 페이지에서
새로운 리소스의 페이지로 바꾸도록 하는 것이다
현재는 보통 302를 기본값으로 사용한다고 한다, 하지만 권장 코드는 303과 307이다
이 이유는 302가 초기에 만들어진 의도가 원래 메서드를 유지하도록 만들었는데
사람들이 대부분 GET으로 바꾸어 사용해 버린 것 (GET으로 바꿀 수 있으니..)
그렇기 때문에 302 보다 좀 더 명확한 303과 307을 만들었고
PRG 패턴에서 권장 사용도 303이지만 302를 써도 무방하다고 한다
특수 리다이렉션
-결과 대신 캐시를 사용
304: Not Modified
클라이언트에게 리소스를 수정되지 않았음을 알려준다 따라서 클라이언트는 로컬 PC 저장된 캐시를 재사용한다
더 자세한 내용은
4XX: Client Error (클라이언트 에러 - 잘못된 문법 등으로 서버가 요청을 수행할 수 없음)
핵심은 오류의 원인이 클라이언트에게 있다는 것이다
즉 클라이언트가 이미 잘못된 요청을 하거나 데이터를 보내고 있기 때문에 똑같은 재시도를 해도 실패한다
400: Bad Request
잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음을 의미한다
즉 요청 구문 및 메시지 등에 오류가 있다는 뜻, 클라이언트가 요청 내용을 다시 검토하고 보내야 한다
401: Unauthorized
'승인'이 아니라 '인증'이 되지 않았다는 뜻이다
클라이언트는 요청한 응답을 받기 위해 반드시 스스로를 인증해야 한다
403: Forbidden
서버가 요청을 이해했지만 승인은 거부함, 주로 인증 자격은 있지만 접근 권한이 불충분한 경우에 발생한다
404: Not Found
요청 리소스가 서버에 존재하지 않거나 권한이 부족한 리소스에 접근할 시 이를 숨길 때 사용한다 (403을 통해서도 숨길 수 있다)
5XX: Server Erro (서버 에러 - 서버가 정상 요청을 처리하지 못함)
서버에 문제가 있는 것이기 때문에 재시도하면 성공을 할 수 있음
예를 들어 과부하가 걸려 다운되었는데 복구 이후에 요청을 하면 정상적인 응답을 해주는 것
500: Internal Server Error
서버가 처리 방법을 모르는 상황이 발생했다는 의미이다
즉 서버 내부 문제로 오류가 발생했다는 뜻, 이외에도 특정한 에러코드로 에러를 규정할 수 없을 때 500을 사용한다
503: Service Unavailable
서버가 요청을 처리할 준비가 되지 않았다는 의미이다
일반적인 원인은 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수가 없는 등의 상황이다
5XX에러 같은 경우 주의해야 할 점은 '서버' 쪽에 무슨 문제가 있을 때만 이 5XX에러를 내야 한다는 것이다
예를 들어 미성년자 접근 불가라는 조건이 있는데, 미성년자가 접근을 하는 것은 사실 서버 쪽에서 조건을 걸었을 뿐
요청 응답 프로세스에서는 정상적인 요청이며 응답이다, 이럴 때는 5XX에러가 아니라 반드시 4XX에러를 내야 한다
개인 학습을 위해 작성되는 글입니다.
제가 잘못 알고 있는 점에 대한 지적 / 더 나은 방향에 대한 댓글을 환영합니다.
참조 링크:
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
https://developer.mozilla.org/ko/docs/Web/HTTP/Status
https://en.wikipedia.org/wiki/Post/Redirect/Get
'WEB > HTTP' 카테고리의 다른 글
[HTTP-Servlet] Response Data (응답 데이터) (0) | 2021.08.20 |
---|---|
[HTTP-Servlet] Request Data(요청 데이터) (0) | 2021.08.20 |
[HTTP] 쿠키와 세션 그리고 캐시(2) (0) | 2021.08.01 |
[HTTP] 쿠키와 세션 그리고 캐시(1) (0) | 2021.08.01 |
[HTTP] Header(헤더) (0) | 2021.08.01 |
- Total
- Today
- Yesterday
- DTO와 VO의 차이
- Spring Container
- 제이쿼리 직접 선택자
- OOP
- 쿠키
- 제이쿼리란
- spring
- application/x-www-form-urlencoded
- maenco
- uri
- ResponseStatusExeceptionResolver
- @ExceptionHandlere
- DefaultHandlerExceptionResolver
- Spring TypeConverter
- Spring API Error
- 제이쿼리 기본 선택자
- jQuery 직접 선택자
- cookie
- @ResponseStatus
- Spring MVC
- Session
- 제이쿼리 인접 관계 선택자
- 캐시
- 제이쿼리 탐색선택자
- ExceptionHandlerExceptionResolver
- Cache
- 제이쿼리 위치탐색선택자
- 맨코
- 세션
- http
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |