HTTP(Hyper text transfer protocol)
HyperText
Text 기반 프로토콜
웹 서버와 클라이언트(PC,스마트폰) 사이에서 데이터를 주고 받기 위해 사용하는 통신 방식
TCP/IP 프로토콜 상에서 동작
즉 HTTP는 TCP/IP 프로토콜 상에서 텍스트 형태의 메시지를 웹 서버와 클라이언트 사이에서 서로 주고받는 방식으로 동작
Connectless & Stateless
URI 와 URL
URI > URL,URN
요청 메시지
메소드(method)
OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
응답 메시지
응답 코드
1xx : Informational
2xx : 성공(Success)
3xx : 추가 액션 있음(Redirection)
4xx : 클라이언트 오류(Client Error)
클라이언트가 보내온 메시지 내용 자체가 잘못되었거나(문법에 맞지 않는 경우 등),
해당 파일이 서버에 없거나 서버의 금지된 디렉토리에 접근 등 서버에서 정상 처리해줄수 없을 때 발생
5xx : 서버 오류(Server Error)
HTTP 동작과정
전체 패킷 구성은 HTTP 메시지 앞에 TCP 헤더가 붙고 그 앞에 IP 헤더가 붙는다.
PC에서 웹 서버에 접속하는 경우라면 TCP 헤더의 목적지 포트번호는 80번, 소스 포트번호는 PC의 포트번호,
IP헤더의 목적지 IP 주소는 웹서버의 주소, 소스 iP 주소는 PC 자신의 IP 주소가 들어간다.
1.Request 메시지 전송
-> DNS로 www.xxxx.ac.kr의 IP 주소를 얻은 후 이 서버와 TCP/IP 연결 설정 시작
이때 IP 헤더의 목적지는 IP 주소는 200.20.2.2 , TCP 헤더의 목적지 포트번호 = 80
(포트번호 명시시는 (http://www.xxxx.ac.kr:8080) 그 값 (8080)이 들어감)
TCP 헤더 다음에 HTTP request 메시지가 들어간다. Request 메시지 시작라인 (Request-Line)의 method에는 GET, Request-URI에는 /student/studentname.html,헤더의 Host:에
www.xxxx.ac.kr 이 들어간다.
2.response 메시지 응답
-> response 메시지 시작라인(Status-Line)에는 HTTP-Version(1.1), request에 대한 처리 상태를 알려주는 status code(예: 200), Reason-Phrase 가 들어간다.
3.연결 종료
HTTP Mesage Format
CRLF(줄바꿈 제어문자)는 messaegheader와 message body를 구분해주기 위해 있음
*header는 헤더가 여러개 올수 있다는 의미
: http에는 많은 수의 헤더가 있고 반드시 있어야 할 필수헤더와 생략 할수 있는 옵션 헤더가 있다.
: HTTP 1.1 버전에서는 Host: 헤더만 필수
시작라인은 request 메시지인 경우 Request-Line이고 , response 메시지인 경우에는 상태코드가 들어있는 Status-Line 이다.
헤더 부분은 한줄씩 "field 이름 : 값"이 들어간다.
HTTP Request Header
Host
User-Agent
Connection : Keep-alive \r\n
HTTP 1.0
stateless 접속 상태 관리를 안했음
접속이 설정된 후에 HTTP Request와 Response 메시지가 교환되고, 다음 Request와 Response는 새로운 접속을 통해 수행하였다(multiple connection)
서버가 지속적으로 접속을 유지하기를 원한다면 Response 헤더에다가 "Connection:keep-alive"를 붙여서 보냄
HTTP 1.1
Upgrade-insecure-Requests: 1 \r\n
Accept-Encoding: gzip,deflate \r\n
Accept : text/html, application/xhtml+xml,application/xml,q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
응답 시에 허용 가능한 미디어 타입을 명시함
미디어 타입/서브 타입
*/* => 모든 미디어 타입
타입/* => 미디어 타입의 모든 서브 타입
text/html => text타입에 대해서는 html을 지원할꺼다.
html - HyperText Markup Language
xhtml - eXtensible HyperText Markup Language
xml - eXtensible Markup Language
apng - Animated Portable Netwok Graphics
q - Quality factor
Accept-Language:ko-KR,ko;q=0.9,en-US;q=0.8 \r\n
Cookie: _ga=GA1.3xxxx.xxxxx\r\n
HTTP Response 헤더
Cache-Control : private \r\n
Content-Length: 1008 \r\n
Content-Type: text/html; Charset=utf-8 \r\n
메시지 바디부분의 데이터 type을 표시함
Content-Type: text/html
Set-Cookie
Server
Location
HTTP 1.x와 HTTP 2.0 차이점
HTTP 1.x
지금까지 가장 많이 사용. HTTP는 웹상에서 클라이언트와 웹 서버간 통신을 위한 프로토콜 웹 서버간 통신을 위한 프로토콜 중 하나입니다. HTTP1.1은 기본적으로 연결당 하나의 요청과 응답을 처리하기 때문에 동시전송 문제와 다수의 리소스를 처리하기에 속도와 성능 이슈를 가지고 있습니다. 이렇다 보니, HOL(Head Of Line) Blocking-특정응답지연, RTT(Round Trip TIme) 증가, 헤비한 Header구조라는 문제점들을 가지고 있습니다. 이러한 문제점들을 해결하기 위해, UI 개발자/프론트엔드개발자는 이미지 스프라이트, 도메인샤딩, CSS/JavaScript 압축, Data URI 등을 업무에 사용하였습니다.
HTTP 2
HTTP 2는 성능 뿐만 아니라 속도면에서도 월등한 녀석입니다. Multiplexed Streams(한 커넥션에 여러개의 메세지를 동시에 주고 받을 수 있음), Stream Prioritization(요청 리소스간 의존관계를 설정), Server Push(HTML문서상에 필요한 리소스를 클라이언트 요청없이 보내줄 수 있음), Header Compression(Header 정보를 HPACK압충방식을 이용하여 압축전송)을 사용하여 선을을 획기적으로 향상 시켰습니다.