HTTP(Hypertext Transfer Protocol)는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 합니다. 클라이언트-서버 프로토콜이란 (보통 웹브라우저인) 수신자 측에 의해 요청이 초기화되는 프로토콜을 의미합니다. 하나의 완전한 문서는 텍스트, 레이아웃 설명, 이미지, 비디오, 스크립트 등 불러온(fetched) 하위 문서들로 재구성됩니다.
클라이언트와 서버들은 (데이터 스트림과 대조적으로) 개별적인 메시지 교환에 의해 통신합니다. 보통 브라우저인 클라이언트에 의해 전송되는 메시지를 요청(requests)이라고 부르며, 그에 대해 서버에서 응답으로 전송되는 메시지를 응답(responses)이라고 부릅니다.
HTTP의 특징은 다음과 같습니다.
요청 라인, 헤더, 공백라인(필수), 메시지 바디
메세지의 구조로는 크게 3가지가 있습니다.
요청/응답 라인: 요청 메시지의 경우, HTTP 메서드(GET, POST, PUT, DELETE 등)와 요청 대상 URL이 포함됩니다. 응답 메시지의 경우, HTTP 버전과 상태 코드(200 OK, 404 Not Found 등)가 포함됩니다.
헤더: 요청이나 응답에 대한 부가적인 정보가 포함됩니다. 예를 들어, 요청 헤더에는 클라이언트가 서버에 보내는 데이터 타입, 인증 정보 등이 포함될 수 있습니다. 응답 헤더에는 서버에서 보내는 데이터의 타입, 데이터 길이 등이 포함될 수 있습니다.
바디: 요청이나 응답에 대한 본문 데이터가 포함됩니다. 요청 바디는 POST나 PUT 메서드와 같이 데이터를 전송해야 하는 경우에 사용됩니다. 응답 바디는 서버에서 클라이언트로 보내는 실제 데이터가 포함됩니다.
HTTP 상태 코드(HTTP Status Code)는 클라이언트의 요청에 대한 서버에서 설정해주는 응답(Response) 정보입니다.
1xx: Informational : 요청 정보 처리 중
2xx: Success : 요청을 정상적으로 처리함
3xx: Redirection : 요청을 완료하기 위해 추가 동작 필요
4xx: Client Error : 서버가 요청을 이해하지 못함
5xx: Server Error : 서버가 요청 처리 실패함
200번대: 성공
200 : GET 요청에 대한 성공
201: 정상적으로 생성이 되었다는걸 서버에서 알려줌 (회원가입 등의 기능에서 사용)
204 : No Content. 성공했으나 응답 본문에 데이터가 없음
205 : Reset Content. 성공했으나 클라이언트의 화면을 새로 고침하도록 권고
206 : Partial Conent. 성공했으나 일부 범위의 데이터만 반환
300번대: 리다이렉션
300번대의 상태 코드는 대부분 클라이언트가 이전 주소로 데이터를 요청하여 서버에서 새 URL로 리다이렉트를 유도하는 경우
301 : Moved Permanently, 요청한 자원이 새 URL에 존재
303 : See Other, 요청한 자원이 임시 주소에 존재
304 : Not Modified, 요청한 자원이 변경되지 않았으므로 클라이언트에서 캐싱된 자원을 사용하도록 권고. ETag와 같은 정보를 활용하여 변경 여부를 확인
400번대: 클라이언트 에러
400번대 상태 코드는 대부분 클라이언트의 코드가 잘못된 경우이다. 유효하지 않은 자원을 요청했거나 요청이나 권한이 잘못된 경우 발생하는데, 가장 익숙한 상태 코드는 404 코드일 것 입니다. 요청한 자원이 서버에 없다는 의미입니다.
400 : Bad Request, 잘못된 요청
401 : Unauthorized, 권한 없이 요청. Authorization 헤더가 잘못된 경우
403 : Forbidden, 서버에서 해당 자원에 대해 접근 금지
404 : Not Found, 요청한 자원이 서버에 존재하지 않음. 없는 url 혹은 존재하지 않는 api를 가지고 요청했을때
405 : Method Not Allowed, 허용되지 않은 요청 메서드
409 : Conflict, 최신 자원이 아닌데 업데이트하는 경우. ex) 파일 업로드 시 버전 충돌
500번대: 서버 에러
501 : Not Implemented, 요청한 동작에 대해 서버가 수행할 수 없는 경우
503 : Service Unavailable, 서버가 과부하 또는 유지 보수로 내려간 경우