1. 개요
1.1 HTTP(Hyper Text Transfer Protocol)
최초에는 문서간 링크를 통해 연결할 수 있는 프로토콜로 사용되었으나, 현재에는 모든 것을 전송한다.
- HTML, TEXT
- Image, Media, File
- JSON, XML
- etc..
1.2 기반 프로토콜
- TCP: HTTP/1.1, HTTP/2 는 TCP 기반이다.
- UDP: HTTP/3
- 현재 대부분은 HTTP/1.1을 사용하는 데, HTTP/2, HTTP/3의 사용도 점차 증가 중이다.
- TCP 통신은 3 way handshake 때문에 신뢰성과 연결성은 보장하지만, 이 과정에 걸리는 시간만큼 속도가 떨어질 수 밖에 없다. 그렇기에 HTTP/3에서는 UDP 프로토콜을 애플리케이션 레벨에서 재설계를 해서 속도를 높혔다.
2. 특징
2.1 클라이언트 서버 구조
- 클라이언트는 요청(request)을 보내고, 서버는 요청에 대한 결과를 응답(response)하는 구조이다.
- 이런 방식으로 클라이언트와 서버를 분리함으로써 각각의 역할에 맞는 책임만 수행하면 되기에 각 역할은 자신의 책임에 집중할 수 있다. 이렇게 사용함으로써 트러블 슈팅이 발생했을 때도 이슈가 생긴 지점에서만 관리하면 된다.
2.2 무상태 프로토콜(Stateless Protocol)
- 무상태 프로토콜은 서버가 클라이언트의 상태를 보존하지 않는다.
- 클라이언트와 서버의 결합도가 매우 낮다.
- 중간에 서버를 변경해도 되기에 Scale-out (수평확장)이 편리하다.
참고. 무상태 프로토콜의 실무적 한계
로그인 서비스와 같이 특정 상태가 있어야 하는 서비스도 있기 때문에 설계적인 한계도 존재하며, 매번 모든 데이터를 보내야 한다는 점도 문제가 될 수 있다. 로그인은 쿠키, 세션 등을 이용해 상태를 유지하고자 한다.
2.3 비연결성(connectionless)
- 클라이언트와 서버가 요청(request) 시에만 연결이 되며, 그 외에는 연결을 유지 하지 않는다. 계속 연결을 유지하는 것도 결국 비용이므로, 이런 연결을 최소화함으로써 비용을 절감한다.
3. 문제점과 해결
3.1 문제점(단점)
- 매번 새로 연결해야하기 때문에 매 연결에 들어가는 비용이 발생할 수 있다.
- TCP/IP는 매번 연결 시 '3 way handshake' 시간이 추가된다.
- 웹 사이트 기준으로 HTML, CSS, JS, Image 같은 자원들도 다운로드한다.
3.2 해결 - HTTP 지속 연결(Persistent Connections)
- 클라이언트와 서버가 연결을 한 뒤 필요한 자원을 요청/응답으로 다운로드 받는다.
- 각각의 자원이 별도의 연결/종료되는 것이 아니라 한 연결에 필요 정보를 모두 다운 받은 뒤에 종료함으로써 연결/종료에 걸리는 시간을 단축할 수 있다.
4. HTTP 메세지 구조
4.1 시작 라인
4.1.1 요청 메세지
- start-line = request-line / status-line
- request-line = method SP(공백) request-tartget SP HTTP-version. CRLF(엔터)
HTTP 메소드
- 종류: GET, POST, PUT 등
- GET: 리소스 조회
- POST: 요청 내역 처리
요청 대상
- absulute-path[?query] (절대경로[?쿼리])
- 절대경로 = "/"로 시작하는 경로
HTTP 버전
4.1.2 응답 메세지
- start-line = request-line / status-line
- status-line = HTTP-version SP status-code SP reason-pharse CRLF
HTTP 버전
- HTTP 상태 코드
- 200: 성공
- 400: 클라이언트 요청 오류
- 500: 서버 내부 오류
- 이유 문구
HTTP 헤더
- header-field = field-name ":" OWS field-value OWS (OWS: 띄어쓰기 허용)
- field-name은 대소문자 구분 없음
- HTTP 헤더 용도
- HTTP 전송에 필요한 모든 부가정보 (ex. 메세지 바디의 내용, 메세지 바디의 크기, 압축, 인증, 요청 클라이언트 정보 등)
- 표준 헤더가 너무 많음
- 필요시 임의의 헤더 추가 가능
- HTTP 바디
- 실제 전송할 데이터
- HTML 문서, 이미지, 영상, JSON 등
출처.
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
'Computer Science > Network' 카테고리의 다른 글
[Network] HTTP 웹 기본 지식 - 5. HTTP 메소드 활용 (0) | 2023.02.09 |
---|---|
[Network] HTTP 웹 기본 지식 - 4. HTTP 메소드(method) (0) | 2023.02.08 |
[Network] HTTP 웹 기본 지식 - 2. URI와 웹 브라우저 요청 흐름 (0) | 2023.02.07 |
[Network] HTTP 웹 기본 지식 - 1. 인터넷과 네트워크 (0) | 2023.02.06 |
[Web Service] 3. Web Service에서 발생하는 데이터의 종류 및 특징 (0) | 2023.01.09 |