기본적으로 네트워크 통신을 할 때 처음 접하는 게 http 통신이다.
그러므로 이번 기회에 정리를 해보고자 한다!
📌 HTTP Protocol
HTTP는 HyperText Transfer protocol의 줄임말로 www상에서 사용하는 프로토콜이다. 1990년 대 팀 버너스 리가 월드와이드 웹을 만들어서 하이퍼텍스트 문서들을 주고받기 위한 규약으로 만든 것이 HTTP이다. 현재에는 문서들 뿐만 아니라 이미지, 비디오, 음성 등 거의 모든 형식의 데이터를 전송하는 데 사용되고 있다.
HTTP는 서버와 클라이언트 사이에 요청과 응답을 주고받는 프로토콜로 우리가 흔히 웹브라우저 주소창에 입력하는 웹 주소인 URL을 통해 요청과 응답이 이루어진다. 실제 전송은 TCP를 통해 이루어지며 포트는 80번을 이용한다.
HTTP 메시지는 기본적으로 클라이언트가 요청하고 서버가 응답하는 구조이기 때문에 메시지는 요청이냐 응답이냐에 따라 각 메시지의 구성 내용이 달라진다.
Header에 있는 용도 (Method)에 따라 무슨 동작을 할지 정해진다.
- Header 받는 곳, 보내는 곳, 데이터의 용도 등의 내용
- HTTP Methods 용도
- Body 실제 내용물
✅ 데이터를 담는 방법 2가지
1. 보내는 주소 뒤에 붙이는 방법
Query String (?key=value)
- 데이터를 필터링 (ex. 검색)하는 용도로 많이 사용된다.
- ex) https://www.youtube.com/watch?v=43GjRpeHd9w
Path Variable (/domain/:target)
- /users/1 (1번 User가 대상임을 의미)
- /stores/12 (12번 가게가 대상임을 의미)
특정 데이터를 직접 지정하는 용도로 많이 사용한다. (특정 사용자, 특정 가게 ..)
2. Body로 보내는 방법
주로 지정된 포맷으로 보낸다.
Form-data: Http 프로토콜에 정의된 방식으로 전달
- key-value 형태
- 파일을 전송할 땐 이 방식으로 보내야 함
raw: 보내는 사람이 임의로 전달
- 그러나 서버 개발자와 협의된 형태로 보내야 올바른 통신 가능
- XML, JSON
HTTP Methods 중 GET과 DELETE는 Body를 사용하지 않는다.
- 주소에 표현하는 Query String이나 Path Variable만으로 원하는 대상을 충분히 표현 가능하기 때문이다.
HTTP는 상태를 저장하지 않는 (Stateless)한 통신 방식
즉, 한 번 연결이 이루어지고 원하는 바를 이루면 연결을 해제하고 상태를 저장하지 않는다.
📌 HTTP 메서드
HTTP 메서드는 클라이언트가 서버에 요청의 목적 및 종류를 알리는 수단이다. HTTP 요청 시에 메시지 시작 줄에 표시된다. RestFul API 구조 등이 많이 사용되기 때문에 주로 GET , POST, PUT, DELETE 정도의 메서드 위주로 알아 두면 좋다.
❗ GET vs POST
GET은 지정된 리소스에서 데이터를 요청할 때 사용된다. 데이터를 읽거나, 검색할 때 사용되는 메서드이며 요청을 전송할 때 URL 주소 끝에 쿼리 스트링(QueryString) 으로 전송된다. GET은 설계 원칙에 따라 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다. 그래서 브라우저에서 웹 페이지를 열어보거나 게시글을 읽는 등 조회를 하는 행위는 GET으로 요청하게 된다.
POST는 리소스를 생성하기 위해 서버에 데이터를 보내는 데 사용된다. 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송한다. HTTP 메세지의 Body는 길이의 제한없이 데이터를 전송할 수 있다. 그래서 POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있는 이유도 이 때문이다. POST로 요청을 하게 되면 서버의 무언가는 변경되도록 사용된다.
'🍞 Computer Science > 네트워크' 카테고리의 다른 글
[CS] 네트워크 총정리 (0) | 2024.07.23 |
---|---|
[네트워크] SocketIO vs WebSockets (0) | 2023.02.02 |
[네트워크] HTTP vs WebSockets (0) | 2023.02.02 |
[네트워크] REST와 RESTful API (1) | 2022.10.07 |