본문 바로가기
CS/WEB & 네트워크

[네트워크] HTTP

by thedev 2023. 1. 8.

 

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 메시지 구조

 

 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 응답 메시지

 

HTTP 응답 메시지

 

2.1. 시작 라인 : HTTP 버전, 상태 코드, 상태 코드를 사람이 이해할 수 있는 글로 표현

2.2. 헤더 : HTTP 전송에 필요한 모든 부가 정보 (메시지 크기, 브라우저 정보, 서버 정보, 캐시 등)

2.3. 공백 라인 : 헤더와 바디를 구분하기 위한 라인, 가독성을 위해 넣는 것

2.4. 바디 : 전송 받은 데이터

 


 

참고 자료

 

https://youtu.be/IjxkKQvn8Bc

https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-HTTP-%EB%A9%94%EC%84%9C%EB%93%9C-%EC%A2%85%EB%A5%98-%ED%86%B5%EC%8B%A0-%EA%B3%BC%EC%A0%95-%F0%9F%92%AF-%EC%B4%9D%EC%A0%95%EB%A6%AC

https://inpa.tistory.com/entry/HTTP-%F0%9F%8C%90-%EB%B0%B1%EC%97%94%EB%93%9C-%EB%A1%9C%EB%93%9C%EB%A7%B5-HTTP%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C%EC%9A%94

'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