일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ROT13
- Bandit
- 코딩테스트
- 자바스크립트의 역사
- 프로그래머스
- REST API
- mutation
- nestjs
- vanila js
- tr명령어
- 자바스크립트
- 백준
- JavaStritp
- 피보나치 수
- linux
- javascript
- Query
- 카카오
- node
- await
- 모던 자바스크립트
- 실패율
- typeorm
- kakao
- 코딩태스트
- typescript
- js
- RestAPI
- graphql
- html
- Today
- Total
꿀 떨어지는 코딩 양봉장
HTTP의 기본 본문
HTTP는 HyperText Transfer Protocol의 약자로 개발자가 아니어도 많이 들어보았을 것이다.
HTTP는 HTML을 전송하는 프로토콜로 시작했지만 지금은 모든 것을 HTTP로 전송한다.(사진, JSON, 텍스트..)
HTTP에는 많은 버전들이 있다.
하지만 현재로 가장 표준 스펙이 되는 것은 1999년에 출시된 HTTP1.1이다.
HTTP 2.0과 HTTP3.0도 나왔지만 둘 다 성능을 개선시킨 것이다.
HTTP3.0은 UDP 기반으로 만들어졌다.
일단 지금 공부하는 HTTP는 1.1을 기준으로 설명하는 것이다.
HTTP의 특징
HTTP의 특징으로 크게 무상태 프로토콜(Stateless)과 비연결성이 있다.
무상태 프로토콜(Stateless)
무상태 프로토콜의 뜻은 서버가 클라이언트의 상태를 보존하지 않는다는 뜻이다.
아래 두 가지 상황이 있다. 비교하면서 읽어보자
상태 유지 - Stateful
고객: 자동차 얼마예요?
점원: 100만 원입니다. (자동차 상태 유지)
고객: 2개 주세요
점원: 200만 원입니다. 카드 또는 현금중 어떤 걸로 구매하시나요? (자동차, 2개 상태 유지)
고객: 현금으로 결제하겠습니다.
점원: 200만 원 결제 완료되었습니다. (자동차, 2개, 현금 상태 유지)
무상태 - Stateless
고객: 자동차 얼마예요?
점원: 100만 원입니다.
고객: 자동차 2개 주세요
점원: 200만 원입니다. 카드 또는 현금중 어떤 걸로 구매하시나요?
고객: 자동차 2개를 현금으로 결제하겠습니다.
점원: 200만 원 결제 완료되었습니다.
Stateless는 만약 중간에 점원이 다른 사람으로 바뀌어도 고객이 어떤 것을 원하는지 알 수 있다.
하지만 Stateful은 점원이 다른 사람으로 바뀌면 고객이 말한 정보를 미리 알려주지 않는 이상 알 수 없다.
그래서 Stateless는 고객이 갑자기 증가해도 점원을 대거 투입할 수 있다.
갑자기 클라이언트 요청이 증가해서 서버를 대거 투입할 수가 있다. 즉 스케일 아웃이 가능하다.
하지만 모든 것을 무상태로 설정할 수는 없다.
로그인이 필요한 것들은 상태를 유지해야 한다.
비연결성
- HTTP는 기본적으로 연결을 유지하지 않는 모델이다. 클라이언트와 서버가 계속 연결되어 있지 않는다.
- 일반적으로 초 단위의 이하의 빠른 속도로 응답한다.
- 서버 자원을 효율적으로 사용할 수 있다.
하지만 TCP/IP 연결을 새로 맺어야 한다. 3 way handshake 시간이 추가된다.
또 웹 브라우저로 사이트를 요청하면 계속 수많은 자원이 함께 다운로드된다.
지금은 HTTP 지속 연결로 문제를 해결하였다.
HTTP메시지
HTTP 메시지는
- 시작 라인(start-line)
- HTTP 헤더(header)
- 공백 라인(empty line)
- message body
로 구성되어있다.
시작 라인 (요청 메시지)
request-line으로
method SP request-target SP HTTP-version CRLF로 되어있다. (SP = 공백, CRLF = 엔터)
- HTTP 메서드: GET, POST..
- request-target: 요청 대상으로 절대 경로
- HTTP-version: http 버전
시작 라인 (응답 메시지)
status-line으로
HTTP-version SP status-code SP reason-phrase CRLF로 되어있다. (SP = 공백, CRLF = 엔터)
- HTTP-version: http 버전
- status-code (HTTP 상태 코드): 요청의 성공, 실패를 나타냄
- 200: 성공
- 404: 요청 페이지 없음
- reason-phrase (이유 문구): 이해할 수 있는 짧은 상태 코드 설명
HTTP 헤더
HTTP 전송에 필요한 모든 부가적인 정보가 들어간다.
메시지 바디의 크키, 압축, 인증, 내용, 등등
field-name ":" OWS field-value OWS로 되어있다. (OWS: 띄어쓰기 허용)
Message body
- 실제로 전송할 데이터가 들어간다.
- HTML 문서, 이미지, 동영상, JSON 등등 byte로 표현할 수 있는 모든 데이터가 전송 가능하다.
'Computer Science > HTTP' 카테고리의 다른 글
HTTP 헤더1 - 일반 헤더 (0) | 2022.05.22 |
---|---|
HTTP 상태 코드 (0) | 2022.05.01 |
HTTP 메서드 활용 (0) | 2022.04.09 |
HTTP 메서드 (0) | 2022.04.04 |
HTTP 웹 기본 지식 공부하기 (2) | 2022.03.31 |