Notice
Recent Posts
Recent Comments
Link
S E P H ' S
[Network] 3. HTTP 기본 본문
HTTP(Hyper Text Transfer Protocol)
처음에는 문서간 링크를 통해 연결할 수 있는 프로토콜로 사용했지만 현재는 모든 것을 전송한다.
- HTML, TEXT
- IMAGE, Media, File
- JSON, XML
- ETC
기반 프로토콜
- TCP : HTTP/1.1, HTTP/2 는 TCP 기반이다.
- UDP : HTTP/3
- 현재는 대부분 HTTP/1.1을 사용하는데, HTTP/2, HTTP/3도 점차 증가하고 있다.
- TCP 통신은 3 way handshake 때문에 신뢰성과 연결성은 보장하지만, 이 과정에 걸리는 시간만큼 속도가 떨어질 수 밖에 없다. 그렇기에 HTTP/3에서는 UDP 프로토콜을 애플리케이션 레벨에서 재설계를 해서 속도를 높혔다.
특징
1. 클라이언트 서버 구조
클라이언트는 요청을 보내고 서버는 요청에 대한 결과를 응답하는 구조이다.
이렇게 클라이언트와 서버를 분리함으로써 각각의 역할에 맞는 책임만 수행하면 되기에 각 역할은 자신의 책임에 집중할 수 있다.
이렇게 함으로써 이슈가 생겼을 때도 이슈가 생긴 역할에서만 이슈를 관리하면 된다.
2. 무상태 프로토콜(Stateless Protocol)
- 무상태 프로토콜은 서버가 클라이언트의 상태를 보존하지 않는다.
- 클라이언트와 서버의 결합도가 매우 낮다.
- 중간에 서버를 변경해도 되기에 스케일 아웃(수평 확장)이 편리하다.
무상태 프로토콜의 실무적한계
로그인 서비스와 같이 상태가 있어야 하는 서비스도 있기에 설계적 한계도 있고 매번 모든 데이터를 보내야 한다는 점도 문제가 될 수 있다. 로그인은 쿠키, 세션등을 이용해 상태를 유지하고는 한다.
3. 비연결성(connectionless)
클라이언트와 서버가 요청시에만 연결이 되며 그 외에는 연결을 유지하지 않고 않아야 한다. 계속 연결을 유지하는 것도 결국 비용이고 연결을 최소한으로 함으로써 비용을 절약한다.
단점
- 매번 새로 연결해야 한다는 부분은 매 연결에 들어가는 비용이 문제가 될 수 있다.
- TCP/IP 는 매번 연결 시 3 way handshake 시간이 추가된다.
- 웹 사이트 기준으로는 HTML, JS, CSS, Image 같은 자원들도 다운로드한다.
해결책 - HTTP 지속 연결(Persistent Connections)
- 클라이언트와 서버가 연결을 한 뒤 필요한 자원을 요청/응답으로 다운받는다.
- 각각의 자원이 별도의 연결/종료가 되는 것이 아니라 한 연결에 필요 정보를 모두 다운받은 뒤 종료. 그럼으로써 연결/종료에 걸리는 시간을 단축할 수 있다.
HTTP 메시지 구조
- start-line
- 요청 혹은 응답의 자원(혹은 상태)이 작성되는 공간
Request-line
Format : [method]SP[request-target]SP[HTTP-Vesion]CRLF
EX : GET /search?q=hello&hl=ko HTTP/1.1
Status-line
Format : [HTTP-version]SP[status-code]SP[reason-phrase]
EX : HTTP/1.1 200 OK
- HTTP 헤더
- HTTP 전송에 필요한 모든 부가 정보를 담는다. (ex : 메시지 바디의 내용 및 크기 정보, 압축, 인증, 요청(브라우저) 정보 등
- 표준 헤더가 몹시 많다.
- 필요한 경우 임의의 헤더를 추가할 수 있다.(Ex: catsbi: hihi)
HTTP Header
Format : [header-field]:OSW[field-valuye]OSW
EX : Content-Type: application/json
- empty line (CRLF)
- 공백(Enter) Message Body와 구분하는 역할
- HTTP Message Body
- 실제 전송할 데이터
- HTML 문서, 이미지, 영상, JSON 기타 byte로 표현가능한 모든 데이터
출처
'CS > Network' 카테고리의 다른 글
[Network] 브라우저에 URL을 입력했을 때 발생하는 일들 (0) | 2023.11.30 |
---|---|
[Network] 5. HTTP 헤더 (0) | 2023.06.11 |
[Network] 4. HTTP 메소드, 상태 코드 (0) | 2023.06.05 |
[Network] 2. URI, URL, URN (0) | 2023.06.05 |
[Network] 1. 인터넷 네트워크 (1) | 2023.06.05 |