- http 메시지에 넣을 수 있는 것
- HTML, TEXT
- IMAGE, 음성, 영상, 파일
- JSON, XML (API)
- 거의 모든 형태의 데이터 전송 가능
- 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용
1. HTTP 역사
- HTTP/1.1 1997년: 가장 많이 사용
- RFC2068 (1997) -> RFC2616 (1999) -> RFC7230~7235 (2014) <핵심>
- HTTP/2 2015년: 성능 개선
- HTTP/3 진행중: TCP 대신에 UDP 사용, 성능 개선
- 참고: 현재 http 관련 저서들과 문서에서 RFC2616으로 된 것은 옛 버전이므로 피할 수 있도록하자.
- RCF7230 이 핵심 기술들이고 HTTP/2 , HTTP/3 은 버전 업그레이드 정도니 RCF7230를 자세히 알아야 함
2. 기반 프로토콜 4단계 짝궁들
- HTTP/1.1, HTTP/2 : TCP protocal 기반 위에서 동작
- HTTP/3 : UDP protocal 위에서 동작
3.HTTP 특징
3.1. 클라이언트 서버 구조 ( 동작 방식 )
- 클라이언트 서버를 분리시켜서 각각 독립적으로 진화
- Server에는 data
- business logic client는 UI
3.2. 무상태 프로토콜(stateless), 비연결성
- 무상태 프로토콜
- 서버가 client 상태를 보존 X
- 장점: 서버 확작성 높음
- 단점:client가 추가 데이터 전송
- ex) 고객 - 점원
- 무상태는 응답 서버를 쉽게 바꿀 수 있다.
-> 무한한 서버 증설 가능 - 실무: 상태 유지가 꼭 필요한 경우
(로그인) - 쿠키와 서버 세션등을 사용해서 상태 유지
- 서버가 client 상태를 보존 X
- 비연결성
- 1h 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작음
= 서버 자원을 효율적으로 사용 - 한계: 3 way handshake 시간 추가
- 요즘은 HTTP 지속 연결(persistent connections)로 문제 해결 - 일시적 지속 연결
- ex) 연결 후 종료 될때 까지 html,JS,img는 지속 연결시킴
- 1h 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작음
- http 지속연결
- http에서 tcp/ip 연결을 일정기간 열어두고 여러 요청을 하는 뜻
- 보통 한번 연결하면 일정 시간동안 tcp/ip 연결을 유지하는 방식을 사용
- 무한정 연결하지 않는다.
3.3. HTTP 메시지
3.3.1. 시작라인
1) 요청
request-line = method SP (공백) request-target SP HTTP-version CRLF(엔터)
method(HTTP method) : GET, POST, PUT, DELETE
absolute-path(요청 대상) : absolute-path[?query] (절대경로[?쿼리])
HTTP version : HTTP/1.1
2) 응답
status-line = HTTP-version SP status-code SP reason-phrase CRLF
HTTP version : HTTP/1.1
status-code(HTTP 상태코드): 요청 성공, 실패를 나타냄 • 200: 성공 • 400: 클라이언트 요청 오류 • 500: 서버 내부 오류
reason-phrase(이유문구) : 사람이 이해할 수 있는 짧은 상태 코드 설명 글
3.3.2. HTTP 헤더
1) 요청
Host: 도메인 주소 나타냄 = IP
2) 응답
- 요청, 응답 공통
- 이미지에 있는 내용 이외에도 너무 많다.
- 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보, 서버 애플리케이션 정보, 캐시 관리 정보...
- 아주 중요
- http 헤더 게시글
3.3.3. HTTP 바디
1) 요청 : 보낸는 data 형식에 따라 존재할 수 도 있다.
2) 응답 : 응답은 보통 http 바디에 보냄
http 바디: HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능
4. 단순함, 확장 가능
이전 발행글
다음 발행글
출처: Inflearn-모든 개발자를 위한 HTTP 웹 기본 지식