ComputerNetwork01
HTTP
HTTP란?
- Hyper-text Transfer Protocl의 약자
- Socket을 이용한 웹 페이지 전송 프로토콜
- 웹 페이지 식별: URL
HTTP 패킷
- http1.1에서는 연결 시작, 연결 종료가 있다.
HTTP 요청 메세지
- 요청 내용
- GET /images/logo.gif HTTP/1.1
- 헤더
- 빈 줄
- 기타 메세지를 포함하여 표시된다.
- 요청 내용과 헤더 필드는 로 끝나야 한다.
- Carriage Return + Line Feed
- 빈 줄은 로 구성
HTTP 메소드
HTTP 메소드 |
Request Body |
Response Body |
Safe |
캐시 가능 |
GET |
X |
O |
O |
O |
HEAD |
X |
X |
O |
O |
POST |
O |
O |
X |
O |
PUT |
O |
O |
X |
X |
DELETE |
X |
O |
X |
X |
CONNECT |
O |
O |
X |
X |
OPTIONS |
선택사항 |
O |
O |
X |
PATCH |
O |
O |
X |
O |
HTTP 응답 메세지
- 상태표시 행(status line)
- 200 : OK
- 301 : Moved Permanently
- 400 : Bad Request
- 404 : Not Found
- 505 : HTTP Version Not Supported
- 응답 헤더필드(Content-Type: text/html)
- 빈 줄(empty line)
- 기타 메세지
HTTP 응답과 요청이 이루어지는 과정
- client와 server가 TCP Socket을 생성
- client가 HTTP GET 메세지를 서버로 전송
- 서버가 HTTP 응답 메세지를 클라이언트로 전송
- 서버는 요청 객체를 클라이언트로 전송
HTTP 서버/클라이언트 만들기
- 전통적인 방법
- socket API, TCP socket을 이용한 HTTP 요청 파싱과 응답 모듈 개발
- Web framework를 이용하기
- Python : Django, Flask, Fast API
- Java : Netty, Spring
- JavaScript : Node.js, Express.js
- Ruby : Ruby on Rails
- ASP.NET
HTTP 프로토콜 발전
HTTP/1.0
- HTTP GET 메소드에 대해서 1개의 TCP 연결 사용
- 객체 1개 전송에 1개의 TCP 연결 -> 여러 개의 TCP 연결이 1개 웹 페이지에서 사용
- TCP 연결 만들 때 왕복지연시간 문제 -> non-persistent HTTP
HTTP/1.1
- HTTP, GET 메소드 처리에 이전 TCP 연결을 재사용
- 왕복지연 시간 감소 -> persistent HTTP
- Pipelining으로 병렬 요청과 응답
- 요청을 병렬 전송
- 응답도 병렬 처리 가능
- HTTP/1.1 Pipelining 적용 사례
HTTP/2.0
- 웹 페이지 성능 향상 목표
- HTTP/1.1 에서는 객체가 순차적으로 전송(1개의 TCP 연결대에서) -> Head-of-Line(HoL) 병목 현상 발생
- 웹 페이지 로딩 시간을 50% 단축 목표
- 멀티플렉싱으로 HoL 제거
- 바이너리 프레임
- HTTP/1.1에서는 아스키코드로 전송됐었는데 binary로 전송한다.
- 우선순위, 흐름제어
- 스트림 전송
- 헤더 압축
- Software
- Apache web server
- Nginx
- MS IIS
- Node.js
- Jetty, Netty
HTTP/3.0
- TCP를 이용하는 HTTP/2.0의 HoL 병목현상을 해결하기 위해 UDP를 사용하였다.
DNS
DNS란?
- 인터넷에 연결된 컴퓨터의 이름과 IP 주소 분산 맵핑 시스템
DNS 계층도
