HTTP 에 대해 자세하게 공부하고싶어서 책으로 공부해보려합니다.
1. HTTP : 웹의 기초
🚩 1장 HTTP 개관
1.1 HTTP(Hyper Text Transfer Protocol)
: 현대 인터넷의 공용어로 신뢰성 있는 데이터 전송 프로토콜
전에 작성해둔 HTTP의 기초.. ?
1.2 웹 클라이언트 & 서버
- 💻 서버 : 인터넷 데이터를 저장하고, 클라이언트가 요청한 데이터를 제공
- 🙎♀️ 클라이언트 : 서버에 HTTP 요청을 보냄 ex) 브라우저
1.3 리소스
-
웹 콘텐츠의 원천, 모든 종류의 콘텐츠 소스
<예시>
-
웹 서버 파일 시스템의 정적 파일 : 가장 단순한 리소스로 HTML, 텍스트, JPEG, AVI 등등의 모든 종류의 파일
-
동적 콘텐츠 리소스 : 사용자가 누구인가? 어떤 정보 요청인가? 등에 따라 다른 콘텐츠를 생성한다.
1) 미디어 타입 : MIME
서버 응답메시지 예시
- HTTP는 웹에서 전송되는 객체 각각에 MIME 타입 데이터포맷 라벨을 붙임
# MIME : Multipurpose Internet Mail Extensions : 다목적 인터넷 메일 확장
- 각기 다른 전자 메일 시스템 사이의 문제점 해결을 위해 설계했지만,
HTTP에서 데이터 포맷 라벨을 붙이기 위해 채택되었음
- 서버의 응답 메시지의 Content-type 으로 클라이언트가 다룰 수 있는 객체인가 확인하는 용도
- 주타입/부타입 으로 구성
ex) text/html, text/plain, image/gif ・・・
- 하나의 리소스를 가리키는 문자열
- 종류 : URL, URN
URI의 종류 URL의 예시
- 특정 서버의 한 리소스에 대한 구체적인 위치로 프로토콜, 서버, 리소스 를 명시함
- URL 표준 포맷
- 스킴 : 리소스 접근을 위해 사용되는 프로토콜 ex) http://
- 서버 인터넷 주소 ex) www.hyeb.com
- 웹 서버의 리소스 ex) /velog/index.html
※ 대부분의 URI는 URL을 말한다.
- 리소스의 위치에 영향 받지 않는 유일 무이한 이름
=> 이름이 변하지 않는한 문제없이 동작, 위치에 독립적
- 리소스 분석을 위한 인프라가 없어 채택되지 않고 있음
- urn:scheme
1.4 트랜잭션
- HTTP 트랜잭션 = 클라이언트의 요청 명령 + 서버의 응답 결과
- HTTP 메시지를 이용해 이루어짐
# HTTP 메시지 : 정형화된 데이터 덩어리, 줄단위의 문자열로 일반 텍스트
- 클라이언트 요청 메시지
- 시작줄 : 메시지의 첫줄, 메소드 리소스위치 버전
- 헤더 : 시작줄 다음, : 으로 구분 되어있는 하나의 이름과 하나의 값으로 구성, 빈줄로 끝남
- 본문 : 빈줄 다음, 웹 서버로 보낼 데이터
- 서버 응답 메시지
- 시작줄: 메시지의 첫줄, 버전 상태코드 사유구절
- 헤더 : 시작줄 다음, : 으로 구분 되어있는 하나의 이름과 하나의 값으로 구성, 빈줄로 끝남
- 본문 : 클라이언트로 반환하는 데이터
※ 이 메시지는 TCP 커넥션을 통해 한 곳에서 다른 곳으로 옮겨간다.
1.5 TCP 커넥션 (Transmission Control Protocol)
1) TCP/IP
- TCP와 IP가 층을 이루는 패킷 교환 네트워크 프로토콜의 집합
- 신뢰성 있는 의사소통을 가능하게 함
- HTTP는 자신의 메시지 데이터 전송을 위해 TCP 를 사용
# TCP : 연결 지향 통신을 위한 전송 계층 호스트 간 프로토콜
- 오류 없는 데이터 전송
- 데이터는 언제나 보낸 순서대로 도착
- 언제든 어떤 크기로든 보낼 수 있음
2) 접속, IP, 포트번호
- 클라이언트가 서버에 메시지 전송을 위한 TCP/IP 커넥션을 맺을때 IP와 포트번호를 사용해야함
# IP : Internet Protocol
- 서버 컴퓨터 주소
- 호스트명 : 사람이 알기 쉽게 만든 도메인 , IP 주소의 별명
※ 호스트명 -> IP 주소로 변환할때 DNS를 통해 변환 가능
# 포트 번호 : 서버에서 실행중인 프로그램이 사용중인 번호
※ 포트 번호가 명시되지 않을 경우 기본값 80으로 가짐
1.6 프로토콜 버전
- HTTP/0.9
- 1991년, 디자인결함, GET 메소드만 지원
- HTTP/1.0
- 처음으로 널리 쓰이기 시작
- 버전 번호, HTTP헤더, 메서드추가, 멀티미디어 객체 처리 기능
- WWW이 팽창하게된 계기
- HTTP/1.0+
- 1990년대 중반, keep-alive 커넥션, 가상호스팅, 프락시 연결 등 많은 기능을 포함
- HTTP/1.1
- HTTP 구조적 결함 교정, 성능 최적화, 잘못된 기능 제거
- 더 복잡한 웹 애플리케이션과 배포를 지원 => 현재 주로 사용하는 HTTP 버전
- HTTP/2.0
- HTTP/1.1 성능 문제 개선, 구글의 SPDY 프로토콜 기반
1.7 웹의 구성요소
1) 프록시 : 클라이언트와 서버사이에 위치한 HTTP 중개자로 트래픽을 전달
- 클라이언트의 모든 HTTP 요청을 받아 서버에 전달
- 사용자를 대신하여 서버에 접근
- 요청과 응답을 필터링 하며 모든 웹 트래픽 흐름 속에서 신뢰할 만한 중개자 역할
# 트래픽 : 네트워크 장치에서 일정 시간 내에 흐르는 데이터의 양
- 웹사이트에 트래픽이 많다는 것은 사용자 접속이 많아서 전송하는 데이터의 양이 많다는 것을 뜻
2) 웹캐시 : 자주 찾는 웹페이지를 성능 향상을 위해 클라이언트 가까이에 보관하는 HTTP 창고
- 자신을 거쳐가는 문서 중 자주 찾는것의 사본을 저장해두는 특별한 종류의 HTTP 프록시 서버
- 클라이언트에 가까워 더 빨리 문서를 다운 받을 수 있다.
3) 게이트 웨이 : 다른 서버들의 중개자로 동작하는 특별한 서버
- 주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용
- 스스로가 리소스를 가직 있는 진짜 서버인 것 처럼 요청을 다루며 클라이언트는 이를 알아채지 못함
4) 터널 : 단순히 HTTP 통신을 전달하기만하는 프록시
- 두 커넥션 사이에서 RAW 데이터를 그대로 전달
- 비 HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송
5) 에이전트 : 자동화된 HTTP요청을 만드는 준 기능적 웹 클라이언트
- 사용자를 위해 HTTP요청을 만들어주는 클라이언트 프로그램
ex) 브라우저
※ 1.7 웹의 구성요소 부분은 공부한 뒤 추가할 예정