티스토리 뷰
HTTP 기본
웹상의 대부분의 데이터는 HTTP를 기반으로 주고 받는다. 버전에 따라 다르지만, HTTP/1.1 기준으로 거의 업그레이드 되는 내용이라 1.1 버전을 기반으로 설명한다.
HTTP는 클라이언트 서버구조, 무상태(Stateless), 비연결성의 특징을 가진다.
클라이언트 서버 구조
클라이언트의 요청(request)과 서버의 응답(response)으로 통신한다.
✨무상태(Stateless)
서버가 클라이언트의 상태를 관리하거나 보존하지 않는다. 이 이유는 확장성(scaliability, scale out) 때문이다. 무상태일 경우 과거의 상태를 보존하지 않아 보내야하는 데이터의 정보량은 많아진다. 하지만, 다른 서버를 사용하는 것이 가능하기 때문에 많은 트래픽이 일어날 경우, 서버의 수를 늘려 대응하는 것이 가능해진다. 로그인 등 상태를 유지해야하는 경우도 있다. 이런 경우, 쿠키(브라우저)나 세션(서버)을 사용하여 상태 유지를 한다. 하지만 가능한 stateless 상태를 유지할 수 있게 설계하는 것이 중요하다.
비연결성
http의 기본은 연결을 유지하지 않는 모델이다. 서버의 자원을 효율적으로 사용하기 위함이다. 접속 시간동안 계속 연결되어 있다면, 서버에 요청이 들어오는 경우는 새롭게 검색하거나 클릭할 때 일부 시간인데 필요에 비해 자원이 낭비되기 때문이다. 하지만 주고받는 정보량이 많아지면서 TCP 연결과 종료를 계속 발생시켜 통신량이 늘어나게 되면서 지속연결(Persistent Connections)로 연결문제를 해결하고 있다. 지속연결은 여러 리퀘스트를 보낼 수 있도록 파이프라인화가 가능하다. 적어도 1개의 html 파일을 구성할 때 까지는 지속연결로 연결을 지속시키는 듯 하다.
HTTP 메세지
시작라인
요청메세지는 시작라인이 request-line 이다. method에는 get, post 등의 요청 메세지, request-URI(request-target)에는 보통 절대경로와 쿼리를 가진다.
request-line = method [공백] request-URI [공백] HTTP 버전
응답메세지는 시작라인이 status-line 이다. status-code에는 200, 300 등의 상태코드가 들어가고, reason-phrase에는 OK 등 문구가 들어간다.
status-line = HTTP 버전 [공백] status-code [공백] reason-phrase(설명)
헤더
field-name에는 대소문자 구분이 없고 : 를 붙여쓴다. field-value는 띄어쓰기를 허용하고 대소문자를 구분한다. 헤더에는 http 전송에 필요한 모든 부가정보가 포함되며 메타데이터 정보라고 한다.
header-field = field-name: (띄어쓰기를 허용하는) field-value
메세지 바디
실제 전송할 데이터가 들어간다. byte로 표현가능한 모든 정보가 포함될 수 있다.
Http 메세지 예시
이미지 출처 : 위키백과
HTTP 메소드
HTTP 메소드는 서버에게 요청할 임무를 의미한다. 아래 5가지가 대표적인 메소드이며 그외 HEAD, OPTIONS 등 다른 메소드도 존재한다. request 요청시 메소드와 함께 request-target(URI)를 전송한다. API URI는 계층구조를 활용하여 리소스를 기준으로 설계한다. 리소스와 해당 리소스를 대상으로 하는 행위를 분리하여 생각해야 한다.
GET
리소스를 조회한다. 메세지 바디를 포함할 수 있지만 지원하는 곳이 많지 않다.
POST
메세지 바디로 서버에 데이터 처리를 요청한다. 주로 신규 리소스 등록이나 프로세스 처리에 사용된다. 프로세스 상태변화에도 사용되기 때문에 리소스가 추가 생성되지 않는 경우도 있다. 애매한 건 POST에서 거의 가능하다고 생각하면 된다. 무적의 POST!
PUT
리소스를 완전히 대체한다. 클라이언트가 리소스 위치를 알고 URI를 지정해주어야 하며 이것이 POST와 차이점이다. 해당 리소스에 일부 정보만 PUT하여도 그 리소스는 PUT요청된 리소스로 대체된다.
PATCH
리소스를 부분변경 한다. 역시 클라이언트가 리소스 위치를 알아야 한다.
DELETE
리소스를 제거한다.
속성
안전(Safe Methods), 멱등(Idempotent Methods), 캐시가능(Cacheable Methods)로 속성을 나눠볼 수 있다.
- 안전 : 리소스를 변경하지 않는다. (예시 - get )
- 멱등 : 몇 번을 호출해도 결과가 같다. 자동복구 메커니즘에 사용가능하다. post는 멱등이 아니다. (예시 - get, put, delete )
- 캐시가능 : 응답결과를 캐시해서 사용해도 되는가이다. post, patch의 경우 복잡해서 캐시가 가능하지만 잘 사용하지 않고 실제는 get, head 정도만 사용한다.
정리
HTTP는 단순하다. 단순하고 확장가능성이 있기 때문에 널리 사용되고 있다. 거의 모든 자료들이 HTTP를 통해 데이터를 주고 받고 있다.
TCP/IP 쉽게, 더 쉽게 + 모두의 네트워크 + 그림으로 배우는 htttp & network basic 책을 읽고, 김영한님 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 듣고 정리한 내용입니다.
'Computer Science > 네트워크' 카테고리의 다른 글
네트워크 시리즈 6. 캐시 관련된 HTTP 헤더 (0) | 2021.01.30 |
---|---|
네트워크 시리즈 5. HTTP 헤더 기본 (0) | 2021.01.29 |
네트워크 시리즈 4. HTTP 상태코드 (0) | 2021.01.27 |
네트워크 시리즈 2. TCP/IP (0) | 2021.01.24 |
네트워크 시리즈 1. Intro (0) | 2021.01.23 |
- Total
- Today
- Yesterday
- 글쓰기미션
- Spring
- JPA
- 객체지향
- OS
- 마스터즈코스
- 내부코드
- 우테코수업
- 모의면접준비
- CS
- DB
- Transaction
- 운영체제
- javascript
- python
- JS
- React
- 학습로그
- 우아한테크코스
- 코드스쿼드
- 네트워크
- 알고리즘
- TIL
- 개발공부일지
- 인증
- java
- 월간회고
- 카카오
- 회고
- TCP/IP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |