HTTP
-모든것이 HTTP(HyperText Transfer Protocol)
-HTTP 메시지에 모든 것을 전송(HTML, 영상, 모든형태의 데이터)
-TCP: HTTP/1.1(중요한 핵심 버전), HTTP/2(성능개선)
-UDP: HTTP/3
HTTP 특징
-클라이언트 서버구조
-무상태 프로토콜(stateless), 비연결성
-HTTP메시지
-단순함,확장가능
클라이언트 서버 구조
-Reqeust Response 구조
-클라이언트는 서버에 요청을 보내고 응답을 대기
-서버가 요청에 대한 결과를 만들어서 응답
-서버는 비지니스 로직과 데이터, 클라이언트는 UI와 사용성에 집중하여 각각 독립적으로 발전 가능
무상태 프로토콜(Stateless)
-서버가 클라이언트의 상태를 보존 X
-장점: 서버 확장성 높음(스케일 아웃)
-e.g. 점원이 바뀌더라도 고객이 모든 정보를 제공하기때문에 상관 없음
-단점: 클라이언트가 추가 데이터 전송
Stateful, Stateless 차이
-상태유지: 중간에 다른서버로 바뀌면 안됨
-무상태: 중간에 다른서버로 바뀌어도 됨(무한한 서버 증설 가능)
-stateless 실무 한계
-로그인 상태유지해야만 하는 경우(브라우저 쿠키와 서버세션들을 사용해서 상태유지)
-상태유지는 최소한만 사용
비연결성
-요청에 대한 응답후에 클라이언트와 연결을 끊음(최소한의 자원 유지)
-수천명이 요청해도 실제 동시에 처리하는 요청은 많지 않음 -> 서버 자원을 매우 효율적으로 사용할수 있음
-한계와 극복
-HTML 뿐만 아니라 자바스크립트, css, 이미지등의 자원을 요청할때 다시 연결해야함(TCP/IP 3 way handshake)
-지속연결(Persistent Connections)로 문제 해결(자원을 다받을때까지 연결을 유지)
HTTP 메시지
start-lin 시작 라인 |
header 헤더 |
empty line 공백 라인 (CRLF:엔터), 필수 |
message body |
시작 라인
-요청메시지
-start-line = request-line(요청) / status-line(응답)
-request-line = method SP(공백) request-target(path) SP HTTP-version CRLF(엔터)
-e.g. GET/search?q=hello&hl=ko HTTP/1.1
-HTTP 메서드(method)
-종류: GET, POST, PUT, DELETE
-GET: 리소스 조회
-POST: 요청 내역 처리
-요청대상(request-target)
-absolute-path[?query] (절대경로[?쿼리]): "/"로 시작하는 경로
-응답 메시지
-status-line = HTTP-version SP status-code SP reason-phrase CRLF
-HTTP 버전
-HTTP 상태코드: 요청 성공, 실패를 나타냄
-200: 성공
-400: 클라이언트 요청 오류
-500: 서버내부 오류
-이유 구문(reason-phrase) e.g. OK
HTTP 헤더
header-field = field-name: OWS(띄어쓰기 허용) field-value OWS
용도: HTTP 전송에 필요한 모든 부가정보
HTTP 메시지 바디
용도: 실제 전송할 데이터, byte로 표현할수있는 모든 데이터
'웹 프로그래밍 > HTTP' 카테고리의 다른 글
HTTP 상태코드 (0) | 2023.02.24 |
---|---|
HTTP 메서드 활용 (0) | 2023.02.24 |
HTTP 메서드 (0) | 2023.02.22 |
URI와 웹 브라우저 (0) | 2023.02.21 |
인터넷 네트워크 (0) | 2023.02.21 |