HTTP란?
HTTP란 TCP/IP 네트워크 아키텍처 기준으로 보면 어플리케이션 계층에서 사용되는 프로토콜이다.
클라이언트-서버 구조에서 통신할 때 사용되며, Request와 Response가 존재한다.
HTTP 구조
HTTP의 구조는 크게 Start line + Header + Body로 구성된다.
- Request
- Start line
- HTTP 메소드와, 타겟 경로, HTTP 버전이 명시된다.
- Header
- Host, cookie, user-agent 등의 정보가 포함된다.
- Body
- 서버로 보낼 정보를 담는다.
GET / HTTP/1.1 Host: developer.mozilla.org Accept-Language: fr
- Start line
- Response
- Start line
- HTTP 버전, 응답 상태 정보가 명시된다.
- Header
- 서버 정보, 날짜, 응답에 대한 정보 등이 들어간다.
- Body
- 서버가 응답한 리소스가 담겨있다.
- HTML, JSON, TEXT등 여러 형식이 올 수 있다.
HTTP/1.1 200 OK Date: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: "51142bc1-7449-479b075b2891b" Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html <!DOCTYPE html... (here comes the 29769 bytes of the requested web page)
- Start line
HTTP 특징
- Stateless
- HTTP를 Stateful로 사용하는 방법
- 쿠키와 세션
- HTTP의 Stateless
HTTP/HTTPS 차이
- HTTP는 암호화 되지 않은 데이터를 전송한다.
- HTTP에 SSL, TLS을 결합 한 것이 HTTPS이다.
- HTTPS 웹사이트는 인증된 기관에서 발급한 SSL/TLS 인증서를 획득해야한다.
- SSL/TLS이란?
- TLS는 SSL의 업그레이드 버전이다.
- RSA암호화를 사용한다.
- SSL/TLS이란?
인증과정
- HTTPS 웹 사이트를 방문한다.
- 브라우저는 서버의 SSL 인증서를 요청한다.
- 서버는 public 키가 포함된 SSL 인증서를 보내준다.
- 브라우저가 CA의 인증서인지 검증하고, public 키를 이용해서 request를 암호화 한다.
- 서버에서 private key를 이용하여 메세지를 해독한다. 그리고 세션키를 암호화해서 브라우저에 전송한다.
- 브라우저에서 세션키를 사용해서 서버와 통신한다.
HTTP 버전
HTTP 1.0 / 1.1
- HTTP의 초기버전(0.9라고 부름)은 한 줄로만 구성되어 있었다.
- 리소스 요청에 대한 응답만 할 수 있다. (GET 메소드만 존재)
- ```
- Request
GET /target.html - Response```
- HTTP 1.0
- 헤더가 추가되었다.
- 버전정보와 메소드 정보를 전송한다.
- GET, HEAD, POST 메소드
- 상태 코드(200, 302, 404..)를 응답으로 보내줘 요청에 대한 성공/실패를 알 수 있다.
- 헤더에 Content-Type을 명시해 HTML 이외에 데이터도 전송할 수 있음
- 요청 하나당 커넥션을 생성하기 때문에 매번 3-way-handshake을 해야한다.
- HTTP도 TCP 프로토콜 위에서 동작하므로, 통신을 하려면 3-way-handshake과정을 거쳐야함.
- HTTP 1.1
- Persistent connection 추가
- 지정한 timeout동안 커넥션을 닫지 않는다.
- HTTP 1.0 단점 개선
- Pipelining 추가
- 앞의 요청의 응답을 기다리지 않고 다음 요청을 보냄
- 응답은 요청을 보낸 순서대로 온다.
- Head Of Line Blocking (HOLB)
- 앞의 요청이 너무 오래걸리면 뒤의 요청은 블럭킹 되는 문제가 있다.
- 헤더 중복 문제
- Persistent connection 추가
HTTP 2.0
- HTTP 1.1 의 확장이며 성능개선을 한 프로토콜이다.
- 전송 방식 전환
- HTTP 1.1 에서는 일반 텍스트에 개행문자로 헤더와 바디를 구분했지만 2.0에서는 바이너리 프레임으로 분할해서 전송한다.
- 바이너리 형식이 전송속도와 파싱속도가 빠르고 오류 발생 가능성이 낮다.
- Multiplexed Streams
- 요청의 프레임이 각 스트림을 통해 전달되고 응답을 받는다.
- 한 커넥션 안에 여러 스트림이 존재하며, 이전 요청의 응답 여부와 상관없이 동시에 여러 요청을 처리할 수 있다.
- Server Push
- 서버가 클라이언트가 요청하지 않은 리소스를 보내줄 수 있다.
- *클라이언트에게 필요한
- 서버가 클라이언트가 요청하지 않은 리소스를 보내줄 수 있다.
- Header Compression
- 이전에 전송된 Header 를 table로 만들어 저장
- 이전 Header에 포함된 내용을 제외한 새로운 내용을 허프만 인코딩으로 압축해서 전송
- HTTP단의 HOLB는 없지만 TCP단의 HOLB는 존재
HTTP 3.0
- QUIC(Quick UDP Internet Connection)를 기반으로 나온 HTTP의 새로운 버전
- QUIC
- UDP 기반의 전송 프로토콜
- TCP의 단점을 극복하기위해 고안됨
RESTful API
출처
https://velog.io/@neity16/HTTP-HTTP-버전-별-특징#http-10
https://aws.amazon.com/ko/compare/the-difference-between-https-and-http/
https://developer.mozilla.org/ko/docs/Web/HTTP/Overview#http_기반_api
'CS > 네트워크' 카테고리의 다른 글
SSL/TLS란? SNI, Intermediate-Chain (1) | 2023.10.22 |
---|---|
쿠키와 세션 (0) | 2021.12.26 |
HTTP의 Stateless (0) | 2021.12.26 |
네트워크의 구성요소 (0) | 2021.07.19 |
컴퓨터 네트워크 첫 걸음 (0) | 2021.07.19 |