HTTP
# HTTP (Hyper Text Transfer Protocol)
HTTP는 서버와 클라이언트가 서로 데이터를 주고받기 위해 사용되는 통신 규칙이다. 클라이언트는 서버에게 정보를 요청하고, 서버는 이에 응답한다. 이렇게 서로 데이터를 주고 받을 때는 일정한 규칙이 필요한데, 이 규칙이 바로 HTTP이다. HTTP에는 두 가지 특징이 있다.
1. 무상태성 (Stateless)
서버가 클라이언트의 상태를 보존하지 않는다. 로그인을 하고 난 뒤 마이페이지로 이동하는 상황을 가정해보자. 서버는 로그인을 한 사용자와 마이페이지로 이동하는 사용자가 같은 사용자인지 알지 못한다. 서버와 클라이언트는 계속해서 통신을 하지만 서버는 클라이언트가 누구인지 기억하지 못하기 때문이다. 따라서 클라이언트 쪽에서 서버에게 자신이 누구인지 알릴 수 있는 인증 방식(ex. 토큰)을 가지고 다닌다.
2. 비연결성 (Connectionless)
서버와 클라이언트의 연결은 지속되지 않느다. 하나의 요청과 응답이 끝나면 서버와 클라이언트의 연결은 종료된다.
# HTTP 메소드
클라이언트는 HTTP의 메소드를 이용하여 서버에게 요청을 한다. 메소드의 종류에는 총 9가지가 있으며, 그 중에서도 주로 5가지가 사용된다.
주요 메소드
GET | 리소스 읽기 |
POST | 리소스 생성 |
PUT | 리소스 덮어쓰기(전체 변경), 리소스가 없다면 생성 |
PATCH | 리소스 부분 변경 |
DELETE | 리소스 삭제 |
기타 메소드
HEAD | GET과 유사, 그러나 상태 줄과 헤더만 반환 |
OPTIONS | 통신 가능 옵션메서드를 설명 (주로 CORS에서 사용) |
CONNECT | 대상 자원으로 식별되는 서버에 대한 터널을 설정 |
TRACE | 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행 |
# HTTP 상태 코드
서버는 클라이언트의 요청에 대한 처리 상태를 코드로 알려준다. 100 ~ 500번대 숫자로 구성되어 있다.
1XX | 요청을 받았으며 프로세스 진행 |
2XX | 응답 성공 |
3XX | 요청 완료를 위해 추가 작업 조치가 필요 |
4XX | 요청 오류 |
5XX | 서버 오류 |
더 자세한 내용은 https://developer.mozilla.org/ko/docs/Web/HTTP/Status에서 확인할 수 있다.
# HTTP 메시지
서버와 클라이언트는 메시지를 통해 요청과 응답을 주고 받는다. 메시지의 구성 요소를 살펴보자.
HTTP 메시지는 시작 라인(start line), 헤더(header), 공백 라인(empty line), 바디(message body)로 구성되어 있다. 전체적인 뼈대는 이와 같고 요청이냐, 응답이냐에 따라 그 내용이 달라진다.
1. HTTP 요청 메시지
1.1. 시작 라인 : HTTP 메소드, 요청 대상 URL, HTTP 버전
1.2. 헤더 : HTTP 전송에 필요한 모든 부가 정보 (메시지 크기, 브라우저 정보, 서버 정보, 캐시 등)
1.3. 공백 라인 : 헤더와 바디를 구분하기 위한 라인, 가독성을 위해 넣는 것
1.4. 바디 : 실제 전송할 데이터 (HTML 문서, 이미지, 영상, JSON 등)
2. HTTP 응답 메시지
2.1. 시작 라인 : HTTP 버전, 상태 코드, 상태 코드를 사람이 이해할 수 있는 글로 표현
2.2. 헤더 : HTTP 전송에 필요한 모든 부가 정보 (메시지 크기, 브라우저 정보, 서버 정보, 캐시 등)
2.3. 공백 라인 : 헤더와 바디를 구분하기 위한 라인, 가독성을 위해 넣는 것
2.4. 바디 : 전송 받은 데이터
참고 자료
'CS > WEB & 네트워크' 카테고리의 다른 글
[네트워크] Cross Origin Resource Sharing (CORS) (0) | 2023.02.10 |
---|---|
[네트워크] REST API (0) | 2022.12.11 |
[WEB] SPA, MPA와 CSR, SSR, SSG (0) | 2022.11.29 |
[WEB] 브라우저 렌더링과 DOM (0) | 2022.11.09 |
[WEB] 브라우저 저장소 (0) | 2022.11.06 |