HTTP 란
HyperTest Transfer Protocol로 문서간에 링크를 전송하는 프로토콜.
HTML, 텍스트, 이미지, 음성, 영상, JSON 등 모든 형태의 데이터가 전송이 가능.
서버간의 데이터 전송에도 거의다 이거 씀.
HTTP/1.1, HTTP/2 는 TCP를 기반으로 하고 있다.
하이퍼텍스트란
참조(하이퍼링크)를 통해 독자가 한 문서에서 다른 문서로 즉시 접근할 수 있게 하는 텍스트
HTTPS
HyperTest Transfer Protocol SSL(Secure Socket Layer)
HTTPS 는 HTTP에서 보안이 강화된 친구.
HTTPS간에 전송되는 데이터는 추가적인 보안 계층이 존재. (TLS, 전송 보안 계층 프로토콜)
특징
클라이언트 서버구조
- request, response 구조
- 클라이언트가 서버에 요청을 보내고, 응답을 대기함.
- 서버가 요청에 대한 결과를 만들어 응답.
- 비즈니스 로직과 데이터는 모두 서버가 처리하고 UI등은 클라이언트가 처리.
- 클라이언트와 서버의 분리를 통해 클라이언트와 서버가 각각의 성장이 가능.
무상태(Stateless) 프로토콜
- 서버가 [클라이언트의 상태를 보존하기 않았기 때문에] 클라이언트는 이어지는 요청이라도 반복해서 보내야함.
ex. 햄버거 주문 -> 햄버거 세트 주문 -> 햄버거세트 2개 주문 -> 햄버거세트 2개, 신용카드로 결제
ex. 복습형 공부방식. 1단원 공부 -> 1단원과 2단원 공부 -> 1단원과 2단원과 3단원 공부....
- 장점 : 데이터를 저장하지 않아도 되어 쉽게 바꿀수 있기에 서버의 확장성이 높다
- 단점 : 데이터를 너무 많이 보내야 한다.
만약에 상태유지(stateful) 프로토콜이라면?
- 간소하지만 진행중 오류가 발생시 처음부터 다시 요청해야함.
- 중간에 서버가 변경된다면 다른 서버에게 상태정보를 전달해야함.
비연결성
- 기본적으로 [연결을 유지하지 않는 모델]
- 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 적다. (사람들이 연속적으로 검색버튼을 누르지 않아서)
- 서버 지원을 효율적으로 사용가능.
- 요청마다 연결을 맺어야 해서 3way handshake 시간이 추가된다.
- 현재는 [HTTPS 지속연결] 로 문제를 해결.
HTTP 요청 순서
서버가 클라이언트에게 요청하는 것
- request line (ex. Get /content/page1.html)
- header (ex. -Accept-Language:EN)
- empty line
- message body(optional)
클라이언트가 서버에게 응답하는 것
- HTTP status code (ex. HTTP/1.1 301 Moved Permanently)
- Header (ex. Content-type: html)
- empty line.
- message body(optional)
모든 문장은 \r (맨 앞 이동), \n 으로 끝나야 함.
Header 종류
HTTP/1.x
- header의 시작은 첫번째줄인 요청 혹은 응답줄 다음에 전송.
- header의 끝은 빈 한줄로 인식 즉 헤더의 종료는 \n\n으로 표기됨.
- 키 : 값 쌍으로 전송.
- 모든 줄은 \r, \n으로 종료됨.
HTTP/2, HTTP/3
- 이진 프로토콜 사용.
- 이진 프로토콜이란 아스키 엔코딩처럼 사람이 읽을 수 있게 해주는 문자 기반 프로토콜이 아니라 모든 값을 byte 로 표시한다.
- 헤더는 HPACK 혹은 QPACK을 사용하며 압축을 진행.
- 여기서 HTTP/1에서 사용되는 요청은 : 로 시작하는 준 헤더 파일로 바뀌어서 사용됨.
'CS' 카테고리의 다른 글
[CS] 해시, 대칭키, 비대칭키(공개키) 암호화 (0) | 2023.01.18 |
---|---|
[네트워크] HTTP Header 구조 (3) | 2022.12.27 |
[CS] 아스키코드와 유니코드 (0) | 2022.12.22 |
[네트워크] 허브/스위치/라우터/공유기 (0) | 2022.12.21 |
[CS] OSI 7계층, TCP 4계층 차이점 (0) | 2022.12.21 |